En utilisant la cible Copy
dans le fichier des cibles pour copier les bibliothèques requises, ces fichiers ne seront pas copiés vers d'autres projets qui font référence au projet, ce qui entraîne une DllNotFoundException
. Cela peut être fait avec un fichier cibles beaucoup plus simple cependant, en utilisant un élément None
, car MSBuild copiera tous les fichiers None
vers les projets de référence.
%(RecursiveDir)%(FileName)%(Extension)
PreserveNewest
Ajoutez le fichier des cibles au répertoire build
du paquet nuget avec les bibliothèques natives requises. Le fichier des cibles inclura tous les fichiers dll
dans tous les sous-répertoires du répertoire build
. Ainsi, pour ajouter une version x86
et x64
d'une bibliothèque native utilisée par un assembly managé Any CPU
, vous obtiendrez une structure de répertoire similaire à la suivante :
- build
- x86
- NativeLib.dll
- NativeLibDependency.dll
- x64
- NativeLib.dll
- NativeLibDependency.dll
- MyNugetPackageID.targets
- lib
Les mêmes répertoires x86
et x64
seront créés dans le répertoire de sortie du projet lorsqu'il est construit. Si vous n'avez pas besoin de sous-répertoires, alors les **
et %(RecursiveDir)
peuvent être supprimés et incluez plutôt les fichiers requis directement dans le répertoire build
. D'autres fichiers de contenu requis peuvent également être ajoutés de la même manière.
Les fichiers ajoutés en tant que None
dans le fichier des cibles ne seront pas affichés dans le projet lorsqu'il est ouvert dans Visual Studio. Si vous vous demandez pourquoi je n'utilise pas le dossier Content
dans le nupkg, c'est parce qu'il n'y a aucun moyen de définir l'élément CopyToOutputDirectory
sans utiliser un script powershell (qui ne sera exécuté que dans Visual Studio, pas depuis l'invite de commandes, sur des serveurs de build ou dans d'autres IDE, et n'est pas pris en charge dans les projets DNX project.json / xproj) et je préfère utiliser un Link
vers les fichiers plutôt que d'avoir une copie supplémentaire des fichiers dans le projet.
Mise à jour : Bien que cela devrait également fonctionner avec Content
plutôt que None
, il semble qu'il y ait un bug dans msbuild, donc les fichiers ne seront pas copiés vers les projets de référence à plus d'un niveau (par ex. proj1 -> proj2 -> proj3, proj3 ne recevra pas les fichiers du paquet NuGet de proj1 mais proj2 le fera).