Este é um pequeno erro meio troll do .NET que já me pegou desprevinido algumas vezes e hoje “atacou” outro desenvolvedor aqui da equipe.
A partir do .NET Framework 3.5 foi criado um novo target de compilação chamado “.NET Framework 3.5 Client Profile”, que nada mais é do que um subset do .NET completo, com objetivo de permitir criar aplicações que podem ser instaladas mais rapidamente em computadores que não tenham o .NET 3.5 instalado pois precisam de apenas uma parte dele. Em teoria a idéia é muito boa e válida para produtos que serão distribuidos pela web, mas acaba sendo desnecessário na grande maioria dos casos. Projetos feitos usando esse “.NET Framework 4 Client Profile” têm as seguintes limitações:
- Só podem fazer referencias a outros projetos que também sejam Client Profile
- Não podem ter nenhuma dependencia de .ASP.NET
- Não podem usar WCF Avançado
- Não podem fazer uso de MSBuild em runtime
Mas o que me faz chamar essa funcionalidade de troll é que vários templates de projeto do Visual Studio 2010 usam o Client Profile como padrão (WPF, Windows Forms, Console, Windows Service, Empty Project …). Então em nossa solution nós temos uma class library contendo todos os objetos da aplicação e mapeamento do banco de dados e outra class library com todas as regras de negócio, mas quando criamos uma aplicação Console que faria algumas rotinas batch, ela dava erro de compilação dizendo que não havia conseguido achar a classe da regra de negócios, apesar de a referencia estar correta e o intellisense mostrar todos os métodos. Aparentemente esses templates de projeto não usam mais o “cliente profile” por padrão no Visual Studo 2012.
Então, se você criar um projeto não ASPNET, em .NET 3.5 ou 4.0, fizer referencia(s) a outro(s) projetos mas receber um erro de classe ou referencia não encontrado, verifique se o seu projeto não está usando o Cliente Profile. Isso pode lhe poupar bastante tempo e frustração.