Tenho quatro projetos na minha solução do Visual Studio (todos direcionados ao .NET 3.5) - para o meu problema, apenas esses dois são importantes:
- MyBaseProject <- esta biblioteca de classes faz referência a um arquivo DLL de terceiros (elmah.dll)
- MyWebProject1 <- este projeto de aplicativo da web tem uma referência ao MyBaseProject
Adicionei a referência elmah.dll ao MyBaseProject no Visual studio 2008 clicando em "Adicionar referência ..." → guia "Procurar" → selecionando a opção "elmah.dll".
As propriedades da referência Elmah são as seguintes:
- Aliases - global
- Copiar local - verdadeiro
- Cultura -
- Descrição - Módulos e manipuladores de log de erros (ELMAH) para ASP.NET
- Tipo de arquivo - montagem
- Caminho - D: \ webs \ otherfolder \ _myPath \ __ tools \ elmah \ Elmah.dll
- Resolvido - Verdadeiro
- Versão em tempo de execução - v2.0.50727
- Versão especificada - false
- Nome forte - falso
- Versão - 1.0.11211.0
No MyWebProject1 , adicionei a referência ao Projeto MyBaseProject por: "Adicionar referência ..." → guia "Projetos" → selecionando o "MyBaseProject". As propriedades desta referência são as mesmas, exceto os seguintes membros:
- Descrição -
- Caminho - D: \ webs \ CMS \ MyBaseProject \ bin \ Debug \ MyBaseProject.dll
- Versão - 1.0.0.0
Se eu executar a compilação no Visual Studio, o arquivo elmah.dll será copiado para o diretório bin do MyWebProject1 , junto com o MyBaseProject.dll!
No entanto, se eu limpar e executar o MSBuild para a solução (via D: \ webs \ CMS> C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: ReBuild / p: Configuration = Debug MyProject.sln ) o elmah.dll está ausente no diretório bin do MyWebProject1 - embora a compilação em si não contenha nenhum aviso ou erro!
Eu já verifiquei que o .csproj do MyBaseProject contém o elemento privado com o valor "true" (que deve ser um alias para " copy local " no Visual Studio):
<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath>
**<Private>true</Private>**
</Reference>
(A marca particular não apareceu no xml do .csproj por padrão, embora o Visual Studio tenha dito "copiar local" como true. Eu mudei "copy local" para false - salvo - e configurei novamente como true - save!)
O que há de errado com o MSBuild? Como obtenho a referência (elmah.dll) copiada para a lixeira do MyWebProject1?
NÃO quero adicionar uma ação de cópia do postbuild ao comando postbuild de cada projeto! (Imagine que muitos projetos dependem do MyBaseProject!)