O uso do Copydestino no arquivo de destinos para copiar as bibliotecas necessárias não copiará esses arquivos para outros projetos que fazem referência ao projeto, resultando em um arquivo DllNotFoundException. No entanto, isso pode ser feito com um arquivo de destinos muito mais simples, usando um Noneelemento, pois o MSBuild copiará todos os Nonearquivos para projetos de referência.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<NativeLibs Include="$(MSBuildThisFileDirectory)**\*.dll" />
<None Include="@(NativeLibs)">
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Inclua o arquivo de destinos no builddiretório do pacote nuget, juntamente com as bibliotecas nativas necessárias. O arquivo de destinos incluirá todos os dllarquivos em todos os diretórios filhos do builddiretório. Portanto, para adicionar uma versão x86e x64uma biblioteca nativa usada por um Any CPUassembly gerenciado, você terminaria com uma estrutura de diretório semelhante à seguinte:
- Construir
- x86
- NativeLib.dll
- NativeLibDependency.dll
- x64
- NativeLib.dll
- NativeLibDependency.dll
- MyNugetPackageID.targets
- lib
Os mesmos diretórios x86e x64serão criados no diretório de saída do projeto quando criados. Se você não precisa de subdiretórios em seguida, o **e %(RecursiveDir)podem ser removidos e, em vez incluir os arquivos necessários no builddiretório diretamente. Outros arquivos de conteúdo necessários também podem ser adicionados da mesma maneira.
Os arquivos adicionados como Noneno arquivo de destinos não serão mostrados no projeto quando abertos no Visual Studio. Se você está se perguntando por que não uso a Contentpasta no nupkg, é porque não há como definir o CopyToOutputDirectoryelemento sem usar um script PowerShell (que só será executado no Visual Studio, não no prompt de comando, nos servidores de compilação ou no outros IDEs, e não é suportado nos projetos project.json / xproj DNX ) e eu prefiro usar Linka nos arquivos em vez de ter uma cópia adicional dos arquivos no projeto.
Atualização:
Embora isso também deva funcionar, em Contentvez de Noneparecer que existe um bug no msbuild, os arquivos não serão copiados para referenciar projetos mais de uma etapa removida (por exemplo, proj1 -> proj2 -> proj3, proj3 não obterá os arquivos do pacote NuGet do proj1, mas o proj2 será).