MSBuild ne copie pas une DLL, alors que Visual Studio le fait
-
10-12-2019 - |
Question
Dans notre projet Visual Studio 2010 nous référençons - entre autres - le SmartAssembly.Attributes.dll
et il est correctement copié dans le Bin/Debug
ou Bin/Release
dossier de nos machines de développement locales.Sur le serveur de build, cela est vrai pour toutes les autres références mais pas pour « SmartAssembly.Attributes.dll ».La construction réussit.
Que dois-je vérifier ?
Merci.
La solution
Ouvrez votre .csproj
fichier (ou .vbproj
fichier), et recherchez la référence de l’assembly.Assurez-vous ensuite que le chemin de l'indice est toujours valide sur votre serveur de build.Parfois, VS2010 ajoute un chemin d'indication absolu, au lieu d'en utiliser un relatif au .csproj
fichier lui-même, la lettre de lecteur peut donc être invalide sur une autre machine.
Par exemple, la référence peut ressembler à celle ci-dessous (j'ai composé tout le XML ci-dessous pour illustrer uniquement et il n'est PAS valide), et le chemin d'accès absolu peut être invalide dans le serveur de build (par ex.il n'y a pas de lettre de lecteur d là):
<Reference
Include="SmartAssembly.Attributes, Version=8.0.0.0,
Culture=neutral, PublicKeyToken=b03f1f7f1ad5da3a,
processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<Private>true<Private>
<!-- The HintPath below should exist and be valid in your build server -->
<HintPath>d:\temp\SmartAssembly.Attributes.dll<HintPath>
</Reference>
Vous pouvez modifier le HintPath pour le rendre relatif au .csproj
fichier et donc plus général.Par exemple:
<HintPath>..\libs\SmartAssembly.Attributes.dll<HintPath>
Un autre problème peut être que <Private>true<Private>
n'est pas là.Cet attribut mappé au CopyLocal
propriété dans Visual Studio, donc si elle manque dans votre .csproj
, la DLL ne sera pas copiée dans bin\Debug
ou bin\Release
par MSBuild.Voir http://bronumski.blogspot.com/2009/06/project-reference-fun-and-games.html