Postagens

Dica rápida: debug desabilitado no Visual Studio

Hoje estava trabalhando em um projeto e precisei debuggar uma solução. Só que o debug estava desabilitado, tanto o botão de "triângulo deitado verde" quanto o F5. Achei estranho, mas acabei percebendo o porquê: o projeto que estava ajustado como StartUp Project era do tipo Modeling Project. Foi só mudar isso para um projeto que gera um executável, como um Console Application ou Web, que o debug voltou a ficar disponível. Projetos de banco de dados também fazem o debug ficar indisponível. Óbvio, mas não tão claro... []'s

Pex + TDD

Imagem
Olá, pessoal! Na última edição da .NET Magazine (nº 90), saiu meu artigo falando sobre a ferramenta Pex e seu uso dentro do TDD. O Pex ( http://research.microsoft.com/en-us/projects/pex/ ) é uma ferramenta de geração de código de testes automatizada, ou seja, ela gera as unit tests para você a partir do código-fonte já desenvolvido. Em um primeiro momento não vemos como isso pode se relacionar com TDD, já que a idéia desta técnica é escrever testes antes do código do programa que estamos desenvolvendo. Realmente ferramentas como o Pex não têm utilidade neste cenário quando utilizado o conceito de testes baseado em exemplos. Testes baseados em exemplos são aqueles nos quais nós temos uma entrada de dados e um resultado conhecido, e testamos o nosso código para garantir que o processamento produza a saída esperada. Para fazer sentido o uso de ferramentas de geração de testes automatizada, precisamos de um conceito de testes de unidade diferente. Precisamos pensar nossos testes co...

Como fazer undo-checkout em arquivos de um outro usuário

Hoje tivemos que remover os arquivos que estavam em checkout para uma das pessoas que trabalham com a gente. Só que o detalhe é que a máquina que essa pessoa usou para fazer o checkout, e consequentemente as informações que ficam no workspace , não estavam mais disponíveis (a máquina foi trocada, e a antiga sabe-se lá onde está). Então, como desfazer os checkouts existentes? A maneira que encontramos foi, utilizando um usuário administrador dentro do team project, fazer a remoção do checkout através de linha de comando (tf.exe). Primeiramente, buscamos o nome do workspace que estava associado ao usuario, através do comando abaixo. Retornaram duas ocorrências, que são a máquina antiga e a máquina nova. Essa informação será importante depois. C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE>tf workspaces /owner:acroberto Collection: tfs.intra.cliente.com.br\TPC Workspace     Owner     Computer     ...

Pérola: como dificultar o tratamento de erro de aplicações

Vamos dar uma olhada no método abaixo, que foi pego de uma situação real (mudei os nomes de variáveis para evitar que reclamem que o coloquei aqui). Nesta aplicação, há uma necessidade de sincronizar dados de usuários, buscando dados do sistema A e atualizando no sistema B. public static void AtualizarUsuarios() { try { using (BatchFacade batchFacade = new BatchFacade()) { List<Usuario> usuariosSistemaA = batchFacade.ListarUsuariosSistemaA().GetRegistros<List<Usuario>>(); List<Usuario> usuariosSistemaB = batchFacade.ListarUsuariosSistemaB().GetRegistros<List<Usuario>>(); foreach (Usuario usuarioA in usuariosSistemaB) { Usuario usuarioB = usuariosSistemaA.Find(delegate(Usuario u) { return u.SIAP.Equals(usuarioA.Codigo.ToString()); }); if (usuarioB != null && UsuarioModificado(usuarioA, ref...

Limitações ao se trabalhar com o TFS 2010

Imagem
Ao se trabalhar com o TFS, existem algumas limitações que devem ser levadas em consideração na hora de criar team projects ou work items. É importante conhecer isso para não ter problemas na hora de decidir como estruturar seus projetos (Nenhuma limitação listada é impeditiva para se trabalhar com o TFS, é só se preparar e evitar as situações que elas possam ocorrer ou serem necessárias). Obs. Esta lista foi retirada do livro Professional Team Foundation Server 2010 (Wrox Programmer to Programmer) . []’s Renomear um Team Project Após a criação de um team project (repositório de código-fonte, atividades do projeto, etc.) não é possível renomeá-lo. Uma vez escolhido o nome, será este para sempre, então tome cuidado ao escolher. Caso contrário, se realmente você quiser “renomear”, terá que criar um novo team project e migrar todo o conteúdo do anterior… Mover work items entre Team Projects e Team Project Collections Não é possível mover work items entre team projects diferentes, visto q...

Uso de static em OOP: escolhendo a arma correta

Imagem
Já vi sistemas desenvolvidos em linguagens orientadas a objetos em que todos os métodos das classes eram estáticos. Uma vez perguntei para uma pessoa o motivo dela estar programando dessa maneira. Ela não soube me responder. Bom, por que não devemos colocar static em todos os métodos? Para mim, a melhor resposta é comparar o uso de métodos static com o uso de baionetas. Antes do uso da pólvora, as guerras eram travadas geralmente em combate corpo-à-corpo, com o uso de objetos cortantes como espadas ou machados. No final do século XVIII, na França, começaram a ser produzidas as primeiras baionetas. Baioneta é uma arma branca de curto alcance que pode ser presa na ponta de um fuzil. Dessa maneira, em situações especiais como combate próximo (trincheiras) ou simplesmente falta de munição, os soldados possam utilizar suas armas de fogo como lanças. Mas é claro que atualmente, na maioria das situações, é preferível utilizar fuzis com o objetivo que eles foram criados: disparar pro...

Pérola: como remover caracteres de uma string

Encontrei este código no qual o desenvolvedor queria remover os pontos, traços e barras de um CNPJ formatado (de "12.345.678/0001-00" para "12345678000100"): string estab = string.Empty; char[] delimitadores = new char[] { '.', '/', '-' }; string[] partes = lblCNPJEstabelecimento.Text.Split(delimitadores, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < partes.Length; i++) estab = estab + partes[i]; }  Bizarro... Para remover uma única ocorrência, o método Replace é indicado: http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx Outra alternativa é utilizar regular expressions: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace%28v=VS.100%29.aspx O link abaixo possui um extension method para remover vários caracteres: http://www.csharptricks.com/blog/2006/10/remove-characters-from-string-cnet.html Mantenham o código simples e limpo... []'s