Problema de dependência com o msbuild 4.0 ao fazer dllimport de C# para biblioteca C ++ não gerenciada

StackOverflow https://stackoverflow.com/questions/3048577

Pergunta

Definir explicitamente a dependência no VS2010 entre o projeto C ++ não gerenciado e o projeto C# é homenageado no VS2010, mas a dependência é ignorada no MSBUILD 4.0.

É impossível adicionar uma referência ao projeto C ++ não gerenciado do C# Project, Afaik.

Como garantir a ordem de construção correta se uma solução contiver projetos não gerenciados e gerenciados?

Foi útil?

Solução

O MSBuild tem um bug nele e não honra corretamente as dependências do projeto adicionadas no nível da solução. Dar uma olhada em http://social.msdn.microsoft.com/forums/en-us/msbuild/thread/80cc6447-b720-4806-8395-7c257b207613/ e https://connect.microsoft.com/visualstudio/feedback/details/613284/msbuild-4-does-not-respect-build-order-when-building-a-resolução

Uma postagem da Microsoft na página Connect indica que é um bug na versão de 64 bits do msbuild. Tente mudar para a versão de 32 bits para ver se isso resolve o problema.

Se você não pode fazer isso, ou não funciona, existem duas outras opções. Nenhum deles é ideal.

A primeira opção seria editar manualmente o arquivo SLN e alterar a ordem que os projetos aparecem no arquivo para corresponder à ordem de construção desejada. Eu imagino que a solução de Victor seria uma idéia muito melhor, pois alterações adicionais no arquivo de solução podem acabar substituindo as alterações novamente.

A segunda opção seria exportar manualmente o MSBuild "MetaProject" para a solução e editar a ordem de construção diretamente e adicionar outras personalizações necessárias. Pelo que li, mesmo na Microsoft, eles não "Dogfood" compilação - em vez disso, eles os evitam completamente durante as compilações e usam arquivos MSBuild personalizados.

Para gerar o MetaProj, defina a variável de ambiente MSBuildEmitsolution como 1. Depois de executar o MSBUILL na solução e você deve ver um arquivo ".MetaProj" no mesmo diretório - ele contém o script que o msbuild gera em memória para compilar a solução. Você poderá fazer as edições necessárias, verificar -as e definir o servidor de compilação para compilá -lo.

A questão desaparecerá no próximo lançamento do Visual Studio. A página da Microsoft Connect possui uma postagem da Microsoft que será corrigida na próxima versão, e há rumores de que eles se livram de arquivos .SLN e substituindo -os por projetos adequados do MSBUILD.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top