Ricardo Serradas

Visual Studio ALM in a nutshell

LINQ To Entities e o método Contains, um contorno

fazer um comentário »

Olá a todos,

Depois de muito tempo, volto a escrever. Tem sido uma dura correria que me impossibilitou de dar atenção a este valioso espaço. Porém, mais uma vez, prometo tentar reservar um pouco do meu tempo para enriquecer o conteúdo desta página.

Volto hoje com um assunto que não costumo discutir aqui no blog, que é codificação.

Ultimamente tenho ocupado quase que todo o meu tempo com estudos e discussões sobre a melhor forma de codificar algo. Um problema que encontrei dias atrás foi uma limitação do LINQ To Entities, que não implementou um método mapeado para a função “IN” do SQL. Um exemplo: quero obter todos os usuários do banco cujo ID é um dos números da sequência mística do seriado LOST, que é: 4, 8, 15, 16, 23, 42. A query SQL seria:

SELECT * FROM USER U WHERE U.ID IN (4, 8, 15, 16, 23, 42)

 

Em tese, uma expressão LINQ para fazer a mesma coisa seria mais ou menos assim:

string[] ids = { “4″, “8″, “15″, “16″, “23″, “42″ };

var users = (from t in _db.User where ids.Contains(t.Id.ToString()) select t).ToList();

 

Em tempo de compilação, tudo certo. Porém, ao executar este código, você receberá esta mensagem de erro:

LINQ to Entities does not recognize the method 'Boolean Contains(Int32)'

 

É possível estender as bibliotecas do LINQ para mapear a função, criar uma função ultra-complicada para fazer isso, mas há uma maneira de resolver com uma linha de código, que é:

var users = _db.User.Where("it.Id IN {" + string.Join(",", ids) + "}");

 

Atenção para a palavra chave “it”, ela representa sua entidade na query. Logo, Id é a propriedade.

Experimente!

[]‘s

Ricardo Serradas

Escrito por Ricardo Serradas

08/01/2010 em 12:40 AM

Erro MSB6006 em testes unitários numa Team Build

fazer um comentário »

Olá a todos! Hoje vamos falar de mais um capítulo da série “Problema e solução”.

Problema:

Ao configurar uma Team Build no VSTS de um projeto que compila e que roda os testes unitários tudo certinho, a build roda, porém o status dela fica como “Partially Succeeded” porque os testes unitários falharam e, ao analisar o log, você encontra a seguinte linha no final:

MSBUILD : warning MSB6006: “MSTest.exe” exited with code 1.

O mais interessante é que se você roda os testes unitários a partir do Test List da Solution, todos funcionam, não é?

Causa:

Pois bem. Por algum motivo, o erro se dá por conta do usuário TFSSERVICE* não ter permissão na pasta onde o resultado do build foi colocado (ou “dropado”).

Solução:

Basta permitir escrita (tanto NTFS quando de compartilhamento) para pra o usuário TFSSERVICE na pasta de build drop.

*Este nome pode variar de acordo com a instalação realizada.

[]‘s

Ricardo Serradas

Escrito por Ricardo Serradas

20/10/2009 em 4:54 PM

Publicado em Problema e Solução

Etiquetado com , , ,

Erro TF53010 ao iniciar o TFSServerScheduler

fazer um comentário »

Mais um erro comum depois de criar uma nova instalação do servidor do VSTS é aquele que você visualiza logo ao iniciar a máquina, dizendo algo como “Alguns serviços não puderam ser inicializados adequadamente. Consulte o visualizador de eventos…”.

Então, a primeira iniciativa que tomamos é olhar qual serviço com modo de startup automático não foi inicializado.

Chegando lá no snap-in de serviços, conferimos que o serviço “Visual Studio Team Foundation Server Task Scheduler” (TFSServerScheduler) não está inicializado. Vamos lá então: iniciamos ele manualmente e… Ele inicia! E fica lá, rodando normalmente. Mas oras, então porque ele não conseguiu subir no startup da máquina?

Consultando o Event Log, encontramos a seguinte mensagem de erro:

TF53010: The following error has occurred in a Team Foundation component or extension:

(…)

Application Domain: TFSServerScheduler.exe

(…)

Detailed Message: Unable to connect to the remote server

O que acontece?

O TFSServerScheduler depende tanto do SQL Server quanto do IIS para funcionar. Logo, se um dos dois serviços ainda não estiver devidamente inicializado, o TFSServerScheduler não vai conseguir ser inicializado também.

Como contornar isso?

Basta configurar o serviço TFSServerScheduler para ser dependente dos serviços do SQL e do IIS. Assim, ele só fará tentativas de inicialização depois que os dois serviços os quais ele depende estejam devidamente no ar. Para configurar isso, use a seguinte linha de comando no Command Prompt:

sc config TFSServerScheduler depend= W3SVC/MSSQLSERVER

Reinicie o servidor para conferir. O serviço estará devidamente inicializado.

[]‘s

Ricardo Serradas

Escrito por Ricardo Serradas

13/10/2009 em 5:09 PM

Publicado em Problema e Solução

Erro TF15003 no Event Viewer do TFS

fazer um comentário »

Está aí mais um código de erro que vem incomodando logo depois de uma instalação nova e completa de um servidor do VSTS é feita. A mensagem de erro é encontrada no Visualizador de Eventos (Event Viewer) do Windows e é exatamente assim:

TF15003: The cache root specified in the fileCacheRoot configuration value must be an absolute (rooted) path. File caching will be disabled.

Isso soa falha no processo de instalação e a causa nada mais é do que a pasta que está sendo apontada como cache no arquivo de Configuração do WebService de Version Control do TFS não existir. Como conferir isso? Veja:

- Acesse a pasta de instalação do TFS e edite o arquivo Web.Config, comumente em:

C:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\VersionControl\Web.Config

- Encontre a chave “fileCacheRoot”, dentro de “AppSettings” e confira se a pasta para a qual a chave está apontando existe. No meu caso, apontava para:

C:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\VersionControl\Data

Se a pasta realmente não existir, basta criá-la. Após isso, reinicie os serviços e confira se a mensagem de erro aparece de novo no Event Viewer. Se não aparecer mais, pronto! Seu serviço de controle de versão voltará a trabalhar com cache.

[]’s

Ricardo Serradas

Escrito por Ricardo Serradas

13/10/2009 em 4:01 PM

Publicado em Problema e Solução

Etiquetado com ,

Erro MSB4019 numa Team Build

fazer um comentário »

Numa instancia recém instalada do TFS 2008, onde tudo parecia estar funcionando 100%, encontrei um problema o qual percebi ter pouca referência à respeito.

Criei uma solution de testes para armazenar no Source Control, adicionei projetos, tudo tranqüilo. Depois de tudo, parti para a configuração de um Team Build.

A solução compilava normalmente na máquina client, porém, depois que subi a solução no TFS o team build falhou. Veja a mensagem de erro:

Error MSB4019: The imported project [TargetPath] was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

O erro era vinculado sempre à Web Projects (Web Application, WebService, etc). Isso ocorre porque os targets para aplicações web não estão instaladas no servidor de build.

Existem duas formas de resolver o problema. Uma delas (e a que eu aconselho) é simplesmente instalar o Visual Studio 2008 com as mínimas opções (C# e Visual Web Developer) no servidor de build. O ponto negativo desta solução é que estará consumindo espaço em disco do servidor de build.

A outra opção, se não quiser instalar o VS 2008 no servidor é a seguinte:

- Acesse: MSBuild\Microsoft\VisualStudio\v9.0\WebApplications na máquina client;

- Copie Microsoft.WebApplication.targets para o diretório da solução do projeto;

- Adicione o arquivo como parte da solução e versione-o;

- Edite o arquivo TFSBuild.proj da sua WebApplication usando um editor de texto (normalmente em [TeamProject]/TeamBuildTypes/[SolutionName]Build);

- Encontre a linha que faz o import do WebApplication Target a partir da pasta do MSBuild no Program Files:

<Import Project=”$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets” />

E substitua por:

<Import Project=”$(SolutionDir)\Microsoft.WebApplication.targets” />

- Salve seu arquivo e suba a nova versão no TFS.

Esta solução nada mais faz do que disponibilizar o arquivo de target dentro da própria solution para que o MSBuild o busque lá dentro. O ponto negativo desta é que para cada solução que você for versionar que tiver um Web Project será necessário versionar uma cópia do arquivo de target no TFS.

Escolher a melhor opção para seu cenário é com você. Experimente!

Um abraço,
Ricardo Serradas

Escrito por Ricardo Serradas

29/09/2009 em 5:07 PM

Publicado em Problema e Solução

Etiquetado com , , ,

Erro TF30224 ao criar novo projeto no TFS 2010

fazer um comentário »

Seguindo minha saga de estudos no VSTS 2010, encontrei mais um problema: o erro TF30224 ao tentar criar um novo projeto no TFS.

A mensagem de erro, depois que descobrimos a solução, é bem clara: “verifique se o servidor SQL está no ar ou se você tem permissão para acessá-lo“. Não é bem o servidor SQL, e sim o servidor de relatórios, o Report Server.

Ao acessar http://[TFSSERVER]/Reports com o TFSSETUP (usuário que usei para instalar todo o TFS) vi que não conseguia enchergar nada. Como resolver isso? Acessando a mesma URL porém autenticando-se como o Administrador local do servidor.

Pronto! Só atribuir permissão de Content Manager para o TFSSETUP (ou o usuário que está usando para criar o projeto, o seu “TFS Admin”) assim:

- Acesse http://[TFSSERVER]/Reports como orientado acima;

- Clique na aba “Propriedades”;

- Clique em “Atribuição de nova função”;

- Em “Nome do grupo ou usuário”, digite o usuário que necessita da permissão (no meu caso, [TFSSERVER]\TFSSETUP);

- Em “Função”, selecione “Content Manager” e em seguida clique em OK.

E pronto! Você conseguirá prosseguir com a criação do Team Project.

[]’s

Ricardo Serradas

Escrito por Ricardo Serradas

18/09/2009 em 5:17 PM

Publicado em Problema e Solução

Etiquetado com , , , ,

Erro TF255147 ao configurar o TFS 2010

fazer um comentário »

Olá pessoal,

Hoje instalando o TFS 2010 num ambiente single server me deparei com dois problemas que não estão previstos no TFSInstall.chm, que vem no DVD de instalação do TFS.

O primeiro erro foi que não há web.config em “C:\Program Files\Microsoft Team Foundation Server 10.0\Application Tier\Web Services”.

Solução: É preciso criar uma cópia do web.config.template já existente lá.

Segundo erro: Visualizado no wizard de configuração padrão do TFS. Veja:

Error [ Configuration Database ] TF255147: The following server that is running SQL Server is not listening on the expected TCP port: TFS01.

Erro de configuração de banco de dados no wizard de configuração padrão.

As portas necessárias já estavam liberadas, a instancia do SQL já estava rodando… O que fazer? Foi então quando me lembrei de dar uma olhada nas configurações do SQL 2008 (em Start > All Programs > Microsoft SQL Server 2008 > Configuration Tools > SQL Server Configuration Manager)  e lá vi que o protocolo TCP/IP não estava habilitado (e não vem habilitado por padrão numa instalação do SQL).

SQL Configuration Manager

O que fiz então foi habilitar o protocolo, com um duplo clique em TCP/IP e na aba Protocol, mudar a propriedade Enabled para Yes.

Feito isso, voilá! O teste de configurações rodou 100%! Mas, há um porém… Se a instalação do TFS for interrompida por algum motivo (no nosso caso, pelo SQL não estar corretamente configurado) a instalação do Sharepoint Services será corrompida. Isso é um bug conhecido do Beta1 do TFS.

Por conta disso, mãos à obra! Desinstalar todo o TFS + WSS e começar denovo. Então, dessa vez, tudo correrá bem. :-)

Um abraço!

Ricardo Serradas

Escrito por Ricardo Serradas

18/09/2009 em 5:16 PM

Publicado em Problema e Solução

Etiquetado com , , , ,

VSTS: Mais qualidade aos times de desenvolvimento

fazer um comentário »

Olá a todos,

Visitei o blog do Marcos Dell Antonio e lá encontrei um posto super interessante falando sobre como o VSTS pode aumentar a produtividade/qualidade de uma equipe de desenvolvimento de software.

Gostaria de citar aqui um ponto crucial do post dele: Citação a Joel Spolsky, que criou 12 perguntas simples que, depois de respondidas, te trariam um feedback sobre seu time: ele é bom ou não é? Veja:

  • Você usa controle de versão? VSTS Source Control
  • Você pode gerar uma build em um único passo? Team Build
  • Você faz builds diárias? Team Build
  • Você tem um banco de dados com os bugs registrados? Work Items
  • Você corrige os bugs antes de escrever código novo? Check-in Policies, Work Items
  • Você tem uma agenda atualizada? Sharepoint, Work Items
  • Você tem uma especificação? Sharepoint
  • Os programadores possuem boas condições de trabalho? VSTS :-)
  • Você usa as melhores ferramentas que o dinheiro pode comprar?VSTS (denovo)
  • Você tem testadores? VSTS Test Edition
  • Os novos candidatos escrevem código durante as entrevistas? Aí vai do processo de seleção :-)
  • Você faz testes de usabilidade? Analistas de testes e Testers
  • Segundo Joel, se pensarmos que cada “sim” dado à cada questão você colecionasse um ponto, se o seu total for acima de 10, sua equipe tem qualidade, caso contrário ela precisa e deve ser melhorada.

    Concordei plenamente com o raciocínio e imagino que se um time conseguir trabalhar com cada um desses itens simultâneamente o trabalho realizado será de altíssima qualidade.

    Acima, em itálico, coloquei ao lado de cada pergunta o que julgo ser a resposta mais adequada para cada questão. Claro, no post do Marcos ele encaixa de forma plena o uso do VSTS em cada uma das perguntas, o que é totalmente possível e aconselhado mas, num mundo mais “hostíl”, talvez não seja possível encorporar o trabalho dele em alguns dos itens citados nas perguntas.

    E para finalizar, gostaria de deixar novamente meus parabéns ao posto do Marcos! Fantástica visão de utilização do VSTS! Abaixo, segue link do post dele. Vale muito a pena conferir na íntegra:

    http://www.marcosdellantonio.net/2009/04/06/visual-studio-team-system-mais-qualidade-aos-times-de-desenvolvimento-de-software/

    Um abraço!

    Ricardo Serradas

    Escrito por Ricardo Serradas

    18/09/2009 em 5:15 PM

    Publicado em Discussões

    Etiquetado com , ,

    Nossa! Onde faço o Unshelve?

    fazer um comentário »

    Ultimamente tenho socorrido várias pessoas que vieram me fazer essa pergunta, ainda que para quem já está familiarizado com a ferramenta isso não seja um problema.

    “Eu fiz o shelve lá conforme você recomendou só que agora não sei como recuperar as modificações do servidor! E agora, já era? As perdi? Como faz?”

    Muita calma nessa hora. A solução é bem simples, porém, o problema é compreensível. O botão “Unshelve” está em localizações pouco intuitivas na IDE do Visual Studio 2008. Vamos à elas:

    1 – Em “Pending Changes”: De um certo modo, concordo que umchangeset é composto de modificações pendentes de check-in, mas não são todos que pensam da mesma forma. Para grande maioria, “Pending Changes” são check-outs locais pendentes de commit paraversionamento. Concordo, afinal Shelveset é um conjunto de modificações armazenadas no Servidor, mas ainda não versionadas.

    Mas voltando ao que interessa, o “Unshelve” está aqui: View -> Other Windows -> Pending Changes.

    Localização do botão Unshelve na tela Pending Changes

    2 – Ao clicar com o botão direito em qualquer item no solution explorer. Sim, ali mesmo. Mas desde que você tenha algum projeto aberto. Não vale aquela “Solution1″ :-)

    Localização do botão "Unshelve Pending Changes" ao clicar com o botão direito em qualquer item do Solution Explorer.

    Ah, aproveitando! Galera, vamos dar mais atenção à essa feature do VSTS. Esse tal de Shelve pode ser muito últil para você!

    Um abraço,

    Ricardo Serradas

    Escrito por Ricardo Serradas

    18/09/2009 em 5:14 PM

    Publicado em Dicas

    Etiquetado com , , ,

    Visual Studio 2010 Beta 1 Disponível

    fazer um comentário »

    Olá,

    Já está disponível para download a versão Beta 1 do Visual Studio 2010.

    Os itens disponíveis são:

    • Team Suite
    • Team Foundation Server
    • VS Professional
    • .Net Framework 4.0

    Para acessar, clique aqui.

    Bora testar agora!!!

    []’s

    Ricardo Serradas

    Escrito por Ricardo Serradas

    18/09/2009 em 5:13 PM

    Publicado em Downloads

    Etiquetado com , , , ,

    Seguir

    Obtenha todo post novo entregue na sua caixa de entrada.