Archive for the 'visual studio' Category


Programando para Office 2007 com C#… que nada, VB.NET! 0

Não você não leu errado, escrevi VB.NET (Visual Basic dot Net), isso mesmo.

Eu nunca pensei que algum dia programaria em VB, já programei com VBScript na primeira versão do ASP (há muitos anos atrás), nem conhecia PHP. Nesta época, eu procurava por uma forma de fazer páginas dinâmicas, que para mim naquela época pensava: “Essas páginas HTML não fazem p@&*# nenhuma?”, então tinha que ver um jeito de resolver isso. Depois migrei para PHP onde gostei mais, por haver servidores públicos abertos (open source a bla-bla-bla), mas essas histórias ficam para outro post.

Bom, já tive de programar com VBA para Excel, cheguei a escrever um post sobre isso, minha experiência não foi boa, apesar de ter concluído tarefa que tinha de fazer.

Mas VBA é coisa do “passado”, a partir do Office 2003 foi incorporado o VSTO (Visual Studio Tools for Office) que permite fazer coisas mais “bacanas”, assim dizendo, através de addins para o Excel (posso estar completamente errado, talvez isso já exista a nos e para mim é coisa nova).

Como a plataforma é .NET, fica a escolha do programador escolher entre C# ou VB. Entretanto para esses tipos de desenvolvimento em particular, acredito que para o pessoal do VB a tarefa seja um tanto mais, prática.

Eu nunca gostei da sintaxe do VB, acho muito poluído, odeio o esquema de declaração de váriaveis:

   1: // VB
   2: Dim texto As String = "texto"
   3: Dim conn As SqlConnection = New SqlConnection(cs)
   4:  
   5: // C#
   6: string texto = "texto";
   7: SqlConnection conn = new SqlConnection(cs);

Argh, coisa feia! Em termos de tamanho não varia muito, mas em clareza e facilidade de leitura prefiro o C#.

Mas vou dizer aqui algum dos motivos do por que VB é melhor que C# para desenvolvimento Office:

  • VBA para VB é parecido (senão igual);
  • Todos as macros de VBA são facilmente portáveis para VB ;
  • Passagem de parâmetros para rotinas “dinâmico”;
  • Properties ou métodos diretos, como: Value e Offset

Até onde eu estou estudando essas foram os grandes motivos de se trabalhar com VB.

   1: // VB
   2: Dim wb As Excel.Workbook = Me.Application.Workbook
   3: Dim ws As Excel.Worksheet = wb.Sheets(1)
   4:  
   5: Dim range As Excel.Range = ws.Range("A1") // posso passar apenas row ou (row, col)
   6:  
   7: // C#
   8: Excel.Workbook wb = this.Application.Workbook;
   9: Excel.Worksheet ws = wb.Sheets[1];
  10:  
  11: Excel.Range range = ws.get_Range("A1", missing); // tenho que preencher todos

Em C#, eu preciso passar todos os campos, ou seja, quando não desejado é preciso passar “missing”. Também não temos um método direto como Range(cell, cell). Temos que usar os métodos, set_Range, get_Offset entre muitos outros.

Outro ponto que é irritante também é em rotinas:

   1: // VB
   2: Dim ws As Excel.Worksheet = ...
   3: ws.Protect("password") // simples e direto
   4: // quero content como false
   5: ws.Protect("password", Content := False) // indolor
   6:  
   7: // C#
   8: Excel.Worksheet ws = ...;
   9: // preciso passar todos os parametros
  10: ws.Protect("password", missing, missing, missing, ..., missing);
  11: // quero content como false
  12: ws.Protect("password", missing, false, missing, missing, ...); // meu deus...

Infelizmente para o pessoal do C# trabalhar com Office fica um tanto irritante.

Por este motivo acho que trabalhar com VB agiliza e facilita as coisas, embora tenha que aprender como é a sintaxe do VB, mas aposto que o ganho será muito maior do que ter que programar em C#.

Projetos do Visual Studio com Subversion 6

Baseado no post anterior, pretendo escrever uma série de posts usando o TortoiseSVN para trabalhar com controle de versão num projeto que estou realizando, que se der pretendo colocar minhas experiências aqui, mas isto fica para outros posts.

O Visual Studio não possui integrado outros controles de versão senão o Visual Source Safe (VSS) da própria Microsoft. Eu já trabalhei com o VSS numa empresa o qual estagiei, mas era disponível para desenvolvimento numa rede local. Ter um servidor rodando Windows e com o VSS não é nada comum. Por este motivo optei pelo Subversion.

No post anterior, expliquei sobre como importar um projeto no repositório, dar checkout e realizar um commit simples. Agora vou citar algumas configurações que devem ser feitas quando lidamos com solutions do Visual Studio.

Uma solução é composta de 1 ou mais projetos, estas informações ficam no arquivo *.sln. Cada projeto é compilado e gera dois diretórios bin e obj. Estes arquivos não são de interesse ao controle de versão, uma vez que a responsabilidade dele é apenas gerenciar códigos.

Portanto, devemos eliminar estes diretórios do repositório para isso utilizamos properties do SVN, usando a property svn:ignore.

A configuração do property é particular de um diretório e fica registrado nos arquivos contidos no diretório .svn (ou _svn) que só podem ser vistos se alterar a visualização de arquivos do Windows para exibir arquivos ocultos. Pelo fato desta configuração ser inserida nestes diretórios, ao criarmos um projeto novo que não esta no repositório, esta informação não fica registrada para este projeto, resultando na adição dos diretórios bin e obj. Seria necessário selecionar manualmente cada arquivo que seria submetido excluindo tudo que tem relação com o diretório bin e obj.

Para este problema podemos declarar globalmente o que remover. Assim teremos de remover os seguintes arquivos para uma solução no SVN:

bin obj *.suo *.user

  • bin e obj – são diretório de arquivos binários (compilados)
  • *.suo – corresponde às configurações de usuário para a solução
  • *.user – corresponde às configurações de usuário para o projeto

 

A seguir vou apresentar como realizar cada operação (inserindo properties e global ignore) e comentários sobre problemas que tive e como tratei eles.

Ignorando Diretórios e Arquivos no Subversion

Num diretório com o projeto gerenciado pelo SVN, clique com o direito e TortoiseSVN > Properties, como ilustra a figura abaixo:

tsvn_04 

Em seguida vamos adicionar uma properti svn:ignore com valores

bin obj *.suo *.user

Com espaços entre cada entrada. Marque a opção: Apply property recursively. Isso irá aplicar a todos os subdiretórios recursivamente a mesma property facilitando o trabalho de ter que replicar a mesma configuração para todos os diretórios.

Entretanto, os diretórios que não estão sobre controle (sem .svn/_svn) não terão esta restrição, entao ao dar um Add os arquivos não desejados serão adicionados, sendo necessário fazer a seleção manual. Para este problema a melhor solução é usar configurações globais de ignore aplicando isso a qualquer diretório.

tsvn_03

Ignorando Globalmente Arquivos e Diretórios

Vá em TortoiseSVN > Settings

tsvn_01

Adicione os elementos “bin obj *.suo *.user” como feito acima em “Global ignore patterns

tsvn_02

Agora o trabalho de dar Add simplificou, garantindo que será adicionado apenas arquivos de código ou necessários para a solução.

Problemas e Soluções

Um dos detalhes que tem que se considerar quando se trata de Visual Studio é que os arquivos que gerenciam os arquivos de solução e projeto, são atualizados somente se for realizando um build da solução e projeto.

Por exemplo, se adicionamos uma referência a um projeto ou *.dll o arquivo que gerencias estas referências será alterando somente se houver alguma classe que referêncie a ela, usando o using por exemplo.

Da mesma forma, para remover uma referência não utilizada mais, é preciso removê-la do references e em seguida executar um Build do projeto ou solução para que as alterações sejam registradas no arquivo e assim resultar numa nova versão do arquivo.

Outra situação é se você já deu commit nos arquivos que devem ser ignorados. O jeito é removê-los antes de aplicar o ignore, senão você não terá como dar commit nos arquivos deletados. Realize estas operações com a solução fechada no Visual Studio.

Uma vez corrigido você poderá aplicar as restrições e assim colocar ordem no repositório.

Server Explorer sumiu… 1

Esta semana estava trabalhando no notebook e por um problema de aquecimento o notebook desligou (problema que espero resolver com o cooler, vide post anterior), e acabou danificando o Visual Studio 2008 o qual estava usando.

O problema é que toda vez que eu carregava uma mensagem de erro surgia dizendo que ia remover uma referência (a qual não me recordo agora) e desde entao o Server Explorer parou de aparecer.

Não sei por que eu não fui direto no google e procurar sobre o problema, ao invés disso fui querer reparar o Visual Studio 2008.

Muitos minutos depois… nada de corrigir, ai optei por reinstalar o VS…. muitos e muitos minutos depois o problema persistia.

Bastou ir no google e digitar "visual studio 2008 not showing server explorer" e lá estava a correção.

Basta ir no Visual Studio 2008 Command Prompt e digitar: devenv /setup (e esperar alguns minutos).

Está solução também é válida para o 2005.

Não sei por que as vezes gostamos de complicar as coisas…

[update 14.06.2008] Esta solução de refazer a configuração do VS não resolveu completamente o problema, voltei a receber a mensagem de erro:

‘Visual Studio Explorer and Designers Package’ has failed to load properly

Procurei mais profundamente sobre o problema depois que a mensagem voltou a surgir e, não fui o único a ter este problema. O problema não era o fato de o notebook ter desligado acidentalmente e sim conflito com o Microsoft Source Analysis for C# que tem este problema aqui.

O estranho é que logo que instalei o Source Analysis não tive este problema.

Agora o VS 2008 voltou a funcionar corretamente sem esta mensagem.