Imagens de máquinas virtuais Windows XP (Virtual PC)

Maio 15, 2009

Olá,

Outro dia tive um pequeno problema para planejar testes do software que estamos entregando, que era testá-lo em versões diferentes do Windows.

Atualmente o sistema é desenvolvido com VS 2008 instalado no Windows 7. É muito importante que este software seja testado no Windows XP e Vista também…

Pensamos de cara em pedir ao time de infra para instalar máquinas virtuais nas nossas estações, mas isso ia requerer muito tempo: abertura de chamado, disponibilização da máquina, bla bla bla…

Então, pesquisando um pouquinho, encontrei esse link:

http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&displaylang=en

A Microsoft disponibilizou uma diversidade de imagens de VMs com Windows XP e Vista com diferentes formatos. Basta baixar, descompactar e rodar usando o Virtual PC (Free).

As imagens têm em média 600MB e é uma boa pra quem quer economizar tempo. Fica aí a dica.

Abraço


Mas… Eu não chamei sp_sdidebug!

Maio 12, 2009

Pois é… Perdi alguns valiosos minutos tentando descobrir que raio de trecho de código fazia chamada à essa proc (num sistema com uma granularidade altissima). Eu recebia a seguinte exception:

An exception of type ‘System.Data.SqlClient.SqlException’ occurred in System.Data.dll but was not handled in user code

Additional information: EXECUTE permission denied on object ’sp_sdidebug’, database ‘master’, owner ‘dbo’.

Depois de algumas pesquisas acabei chegando à conclusão de que nenhum código fazia chamada… Eu que estava errando ao atachar o debugger no processo que queria depurar…

Funcionava assim… Eu tenho um windows forms que consome uma DLL que serve algumas telas de autenticação para o sistema. Eu precisava debugar um trecho de código dessa dll (não o SQL), então startava o windows forms sem debugger e depois atachava a DLL ao processo do winforms rodando… E sempre quando uma linha desse código fazia chamada à um método contido em outra DLL de DAL (olha a granularidade aí), eu recebia essa exception.

O tipo de código que ele estava se atachando estava setado como automático. Para resolver esse problema, simplesmente modifiquei isso para código gerenciado. Assim:

img1

- Antes de atachar o debugger ao processo, clique em “Select…” logo acima da lista de processos;

img2

- Selecione “Debug these code types” e marque “Managed”;

Pronto, depure normalmente sua aplicação.

Abs


UnitTests – Problema ao Referenciar uma DLL de outro computador

Fevereiro 5, 2009

Oi Pessoal,

Hoje, construindo algumas classes de testes unitários para o projeto aqui da empresa, tive um problema ao referenciar uma biblioteca que estava em um servidor, usando caminho UNC (“\\”).

A mensagem de erro que eu tinha era:

Test Run deployment issue: The location of the file or directory <caminho do assembly> is not trusted.

Problema ao executar teste: O local do arquivo ou diretório <caminho do assembly> não é confiável.

Este erro acontece em tempo de execução, informando que a DLL vem de um local não confiável.

Para solucionar este problema, basta você desbloquear a DLL para uso na sua máquina. Para isso:

- Botão direito na DLL (no local de origem) e depois propriedades;

- Na aba Geral, você verá o botão “Unblock”, abaixo dos atributos do arquivo, em Security.

- Use este botão para desbloquear a biblioteca. Recompile o projeto e verá que tudo volta a funcionar.

Exemplo de localização do botão. Este está com uma imagem, mas funciona também com DLLs :-)

trustedfile1

Abraço


IE8 RC1

Janeiro 27, 2009

Estava aguardando, mas não acompanhando o lançamento (finalmente) do RC do IE8.

Download aqui

Vale lembrar que ele nao roda no Windows 7, informação essa que li a pouco nesse post do Giovanni.

Vocês tiveram problemas com as versões betas do IE8 como eu? Quais?

Comentem a respeito!

Espero que dessa vez não tenha tantos problemas…


4ª Reunião – .NET Architects

Janeiro 9, 2009

Fala pessoal!

Amanhã será a 4ª reunião do “nosso” grupo de estudos que – pra quem ainda não conhece – trata, entre tantas coisas, de Arquitetura de Software.

O tema dessa reunião será “Ciclo de Vida de Desenvolvimento com Visual Studio Team System”, que será apresentado pelo André Dias, que trabalha na Microsoft.

Como de costume, a “palestra” e a apresentação serão gravados e, posteriormente, a gente publica para apreciação de todos.

Maiores informações: www.dotnetarchitects.net

Pra quem quiser também, temos o grupo de discussão que também é excelente. Aconselho!

Alias, você é um programador de produção negativa?

Vejo vocês na reunião!


3ª Reunião – .NET Architects

Dezembro 10, 2008

Olá pessoal!

Nesse sábado (13/12) rola a 3ª reunião do .NET Architects. O tema dessa reunião será “Domain Driven Design” ou, como é conhecido também, DDD.

Eu particularmente nunca trabalhei com DDD, e o conhecimento que tenho é bem superficial. Para quem está no “mesmo pé” que eu, além de comparecer a reunião, aconselho que leia o artigo do Giovanni, que saiu na ultima edição da .NET Magazine

Caso você não tenha participado de nenhuma reunião, entre em contato com Giovanni ou mesmo comigo e forneça seu nome completo e RG, ja que o acesso na UNIP é controlado.

Serão tratados, além do DDD, outros assuntos do grupo. E, claro, a reunião será gravada. Dessa vez vamos tentar mais microfones para as discussões, já que na ultima gravação o audio deixou a desejar.

Espero vocês la!

Abraços!


.NET Architects

Novembro 25, 2008

Olá pessoal! Muitas novidades!

Tinha publicado em um post anterior falando sobre o que na época era o “Grupo de Arquitetura”. Pois é, o grupo se formou, ja tem um site, estamos caminhando para a 3ª reunião e muito mais em breve.

Visitem: http://dotnetarchitects.net/

Não vou colocar muitos detalhes aqui, pois tem tudo la no site.

Se você ainda não conhecia o grupo, mas tem interesse, na próxima reunião o Giovanni falará sobre DDD.

Deem uma olhada nos prováveis temas das próximas reuniões:

  • Sync Framework;
  • Velocity;
  • ADO.NET Data Services;
  • SQL Data Services;
  • .NET Services;
  • Enterprise Library;
  • ESB;
  • WCF;
  • WF;
  • Windows Dublin;
  • NVelocity;
  • Spring.Net;
  • Castle Project

Aproveitem galera. O conhecimento teórico e prático passado nas reuniões pode tornar o seu conhecimento um diferencial. =)

Até a próxima reunião!


Arquitetura de Soluções – Grupo de Estudos

Outubro 27, 2008

Olá pessoal.

Hoje em dia muito tem-se ouvido falar sobre “Arquitetura de Desenvolvimento”, “Best-Practices em Desenvolvimento de Software”, “Melhores Metodologias”, entre outras coisas. Tudo para tornar o nosso desenvolvimento de software cada vez mais profissional e elegante.

Mas, na prática, aplicamos de fato isso em nosso projetos? Melhor, aplicamos isso da forma correta em nosso projetos?

Independente da sua resposta, acredito que um bom Desenvolvedor/Analista/Arquiteto/Profissional de TI sempre está em busca de aprimorar seus conhecimentos. Um ótimo meio é com grupos de estudos.

Iniciei o meu desenvolvimento em plataforma Unix e meu primeiro contato c/ .NET foi em 2005, em uma Célula Acadêmica (ou grupo de estudos) da minha faculdade, pelo então líder Diego Nogare, hoje um Microsoft MVP. Acreditem, valeu muito a pena. Mesmo tendo mudado “definitivamente” de plataforma só em 2006, foi um aprendizado único.

Bom, falei tudo isso pra “dar um gancho” e falar sobre o Grupo de Estudos de Arquitetura de Soluções que o Giovanni Bassi está organizando. Ele, entre outras coisas, é editor técnico da revista .NET Magazine, da editora DevMedia. E eu sou um entusiasta “de carteirinha” desse tipo de assunto.

Sábado passado (25/10) ja rolou a primeira reunião na UNIP da Cidade Universitária/Marginal Pinheiros e haverão novas reuniões. Não pude comparecer mas tive um feedback do próprio Giovanni muito empolgado com o futuro do Grupo.

Maiores informações:

Giovanni Bassi: http://unplugged.giggio.net/unplugged

Grupo de Estudos Arquitetura de Soluções: http://unplugged.giggio.net/post/Grupo-de-estudos-de-arquitetura-de-software.aspx

Primeira Reunião (Feedback): http://unplugged.giggio.net/unplugged/post/Resultado-da-primeira-reuniao-do-grupo-de-arquitetura.aspx

Vale a pena pessoal, de verdade. Desconheço qualquer tipo de Célula de Estudo com esse foco.

Bons Estudos. E vejo vocês na próxima reunião.

Abraços


Macros no .NET?

Outubro 3, 2008

Oi pessoal,

Descobri uma coisa interessante sobre as macros do Visual Studio, além do VBA também é possivel acessar essas mesmas classes a partir do .NET =P

Em qualquer versão do VS, você pode ir até o menu Tools > Macros e criar scripts para automatizar tarefas. Praticamente todas as funcionalidades do VS estão representadas lá. Só que sabemos que o VBA é uma linguagem limitada, seria bom poder acessar essas classes a partir do C# por exemplo. Por isso a Microsoft disponibilizou as classes COM+ das macros em assembly, assim você pode adicionar a referência a elas nos seus projetos em .NET.

As principais assemblies que você precisa adicionar referência são:

EnvDTE – Contém as funcionalidade do Visual Studio 2003
EnvDTE80 – Contém as funcionalidade do Visual Studio 2005
EnvDTE90 – Contém as funcionalidade do Visual Studio 2008

 

Como nem tudo é perfeito, algumas dicas para você não apanhar no desenvolvimento com essas bibliotecas:

- Elas não são nativas do .NET, são apenas wrappers em cima das dlls COM+. Os seja, prepare-se para deparar com exceptions bizarras vindo de dentro do COM+.

- Não existe documentação/comentários no IntelliSense, procure no MSDN.

- A nomenclatura e a forma de instanciação dos objetos não é intuitiva. Por exemplo, Solution é a classe que representa as solutions no VS 2003, Solution2 as solutions VS 2005, e Solution3 no VS2008. Para instanciar uma Solution3 não funciona um “new Solution3()“, você tem que fazer um cast a partir da classe original Solution:

// Obtem uma instancia do Visual Studio 2008
DTE2
objDTE = (DTE2)System.Activator.CreateInstance(System.Type.GetTypeFromProgID(“VisualStudio.DTE.9.0″, true), true);

// Obtem uma instancia da Solution
Solution3 objSolution = (Solution3)objDTE.Solution;

- Algumas coisas seguem o padrão do VB, nas collections (se você estiver no C#) não é possivel acessar um item usando colchetes e o indice não começa do zero e sim do um. Isso impede o foreach funcionar em cima dessas collections. Exemplo a collection de projetos da solution:

// Retorna o nome do primeiro projeto da solution
string strPrjName = objSolution.Projects.Item(1).Name;

 

Tirando essas dificuldades, as possibilidades são muitas, você pode desenvolver em C# por exemplo, um gerador automático de solutions e projetos com as camadas e namespaces já no seus padrões.

Abraços!


Regras Personalizadas no FxCop – Parte 2

Setembro 25, 2008

Olá pessoal,

Na parte 1 falei sobre o desenvolvimento de uma regra personalizada no FxCop. As possibilidades são muitas, até o momento eu desenvolvi duas regras, uma para validar a nomenclatura de variáveis locais nos métodos, pois a regra que vem com o FxCop valida apenas membros (métodos, propriedades, etc.) públicos, e outra regra que verifica se o programador chama o método Dispose dos objetos que implementam a interface IDisposable.

Outra coisa boa é que a mesma assembly pode ser utilizada tanto no FxCop quanto no Code Analysis do VS Team System. Nesse caso basta publicá-la na pasta C:\Arquivos de programas\Microsoft Visual Studio 9.0\Team Tools\Static Analysis Tools\FxCop\Rules.

Bom regra desenvolvida e testada, agora vem a pergunta: como distribuir a assembly na pasta Rules em todas as estações dos desenvolvedores? Vou ter que sair copiando a assembly máquina por máquina toda vez que houver uma atualização? Infelizmente nem o FxCop nem o Code Analysis do VSTS tem uma solução pronta e automatizada para isso. E o pior, em minhas buscas pela net não encontrei muita orientação sobre esse problema =/

Depois de quebrar um pouco a cabeça encontrei uma solução razoável: colocar a assembly da sua regra em uma pasta na rede. Depois é só apontar o FxCop ou o VSTS para buscarem a regra da rede, assim você precisará atualizar a assembly em apenas um local.

Para essa solução funcionar, indepedente de você utilizar o FxCop ou o VSTS, primeiro altere a configuração de segurança do Framework, senão ele irá bloquear a execução de qualquer assembly a partir da rede:

1 – Vá até Painel de controle > Ferramentas administrativas > Microsoft .NET Framework 2.0 Configuration;
2 – Entre nas propriedades do item My Computer > Runtime Security Policy > Machine > Code Groups > All_Code > LocalIntranet_Zone;
3 – Clique na aba Permission Set, provavelmente estará como LocalIntranet, troque para FullTrust.

Feito isso, no projeto do FxCop você irá até aba Rules, botão direito Add Rules, e adicione a assembly da sua regra a partir de uma pasta na rede.

Se você utiliza o VSTS, ele permite apontar apenas a pasta inteira das Rules para rede, então copie a pasta com as regras pré-existentes (C:\Arquivos de programas\Microsoft Visual Studio 9.0\Team Tools\Static Analysis Tools\FxCop\Rules) mais a sua para a rede e efetue o apontamento no registro:

1 – Abra o regedit e vá até a chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Setup\EDev;
2 – No registro FxCopDir informe o diretório das regras na rede.

Pronto, agora você tem uma distribuição centralizada das suas regras =)

Abraços!