33 votes

Comment référencer différentes versions de DLL avec MSBuild

J'ai un projet d'application web qui utilise un ensemble de 3ème partie de la dll. Le problème est que les dev/mise en scène de l'environnement est en 32 bits, mais la production est en 64 bits. En tant que tel, nous avons à nouveau référence et de construire la solution à chaque fois que nous voulons déployer. Je suis maintenant de vouloir automatiser cela, mais ne savent pas comment aller à ce sujet avec MSBuild?

Tous les autres dll sont les mêmes, juste les 3 3ème partie de la dll.


MODIFIER

J'ai fait quelques progrès, cependant suis venir avec certains d'exécution problèmes d'assemblage.

J'ai 3 fichiers dll, 1.dll, 2.dll, 3.dll. La version du fichier est de 5.1 pour chaque. Pour le 64 bits dll, les noms sont exactement les mêmes, juste de la différence des versions de fichiers. Ce que j'ai fait, est renommé à chacun de 1.v5.dll, 1.v6.dll etc. Dans mes fichiers de projet, je suis pour le référencement de chaque fichier dll comme suit:

<Reference Include="1.v5.dll" Condition="'$(Platform)'=='x86'">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>bin\1.v5.dll</HintPath>
  <Private>False</Private>
</Reference>
<Reference Include="1.v6.dll" Condition="'$(Platform)'=='x64'">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>bin\1.v6.dll</HintPath>
  <Private>False</Private>
</Reference>

Cela fonctionne dans l'IDE de Visual Studio, et ma solution compile le fichier, mais quand je vais pour faire fonctionner le site, j'obtiens l'erreur suivante...

"Impossible de charger le fichier ou l'assembly '1.v5' ou une de ses dépendances. L'assemblée manifeste définition ne correspond pas à la référence d'assembly.

Toute réflexion sur la manière d'aborder ce?

39voto

stijn Points 13405

Vous pouvez créer conditionnelle références dans le fichier de projet comme ceci:

<Reference Include="32bit.dll" Condition="'$(Platform)'=='x86'"/>
<Reference Include="64bit.dll" Condition="'$(Platform)'=='x64'"/>

Pour utiliser cette l'intérieur de VS, vous devez créer deux solution plates-formes: une pour le x86 et un pour la cible x64. Selon les plate-forme de l'un de la dll sera sélectionné, pas besoin de re-référencement.

Pour automatiser ce à l'aide de msbuild, créer un nouveau fichier de projet qui s'appuie de l'autre fichier de projet un certain nombre de fois, chaque fois pour une autre plate-forme/configuration/...:

<Target Name="BuildAll">
  <MSBuild Targets="myproject.proj" Properties="Platform=x86;Configuration=Debug"/>
  <MSBuild Targets="myproject.proj" Properties="Platform=x64;Configuration=Debug"/>
  <MSBuild Targets="myproject.proj" Properties="Platform=x64;Configuration=Release"/>
</Target>

Jetez un oeil à la tâche MSBuild référence pour les options supplémentaires comme la construction en parallèle.

20voto

mickyjtwin Points 1770

C'est ce que j'ai compris, et semble fonctionner sans problème.

J'ai créé 2 solution plateformes x86 et x64. J'ai créé un nouveau dossier dans ma solution répertoire appelé "Références", et créé n x86 et x64 dossier: \Références\x86\ \Références\x64\ Les 3 dll pour chaque sont ensuite placés dans leur répertoire respectif.

Dans chaque projet du dossier, j'ai ensuite ajouté les références suivantes:

<Reference Include="{Reference1}" Condition="'$(Platform)'=='x86'">
  <HintPath>..\References\dlls\x86\{Reference1}.dll</HintPath>
</Reference>
<Reference Include="{Reference2}" Condition="'$(Platform)'=='x64'">
  <HintPath>..\References\dlls\x64\{Reference2}.dll</HintPath>
</Reference>

Maintenant, quand je développe au sein de l'IDE, je suis en train de le le dll appropriés spécifiques à mes besoins.

J'ai juste ajouté un post-créer un événement qui copie la dll basé sur l' $(Plate-forme) de la variable dans le répertoire bin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X