54 votes

Existe-t-il un moyen de spécifier les références d'assemblage en fonction de la configuration de la construction dans Visual Studio ?

J'ai un projet qui ajoute une certaine extensibilité à une autre application par le biais de son API. Cependant, je veux pouvoir utiliser le même projet pour plusieurs versions de leur application, car la plupart du code est le même.

Cependant, chaque version de l'application nécessite une référence à l'assemblage approprié pour cette version du logiciel. Ils chargent leurs assemblages dans le GAC, donc même si je pouvais spécifier le fichier version de l'assemblage à utiliser en fonction de la configuration de la construction, ce serait parfait. Existe-t-il un moyen de faire cela à partir de VS ou ai-je besoin d'un outil de construction externe ?

59voto

adrianbanks Points 36858

Il existe un moyen de le faire, mais vous devrez modifier manuellement vos fichiers de projet. Les fichiers de projet peuvent avoir un Condition qui leur est appliqué dans de nombreux éléments, y compris celui des références.

Vous pouvez les ajouter à vos références pour préciser quand la référence doit être utilisée :

<Reference Include="Product, Version=1.0.0.0" Condition="'$(Configuration)'=='V1'">
</Reference>
<Reference Include="Product, Version=2.0.0.0" Condition="'$(Configuration)'=='V2'">
</Reference>
<Reference Include="Product, Version=3.0.0.0" Condition="'$(Configuration)'=='V3'">
</Reference>

Vous définissez ensuite plusieurs configurations de construction ( V1 , V2 , V3 ) et chaque référence sera incluse uniquement dans la configuration de construction choisie.

Combinez cela avec des symboles de compilation conditionnelle et #if dans votre code et vous devriez être en mesure de faire ce que vous voulez.

Une chose à laquelle il faut faire attention si vous faites cela est qu'il est facile de faire en sorte que Visual Studio supprime les attributs conditionnels du fichier de projet.

11voto

sweetfa Points 1378
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\SharedLibs\log4net\$(Platform)\$(Configuration)\log4net.dll</HintPath>
</Reference>

Vous pouvez remplacer le chemin de l'indice par les propriétés :

$(Configuration) est équivalent à Release/Debug ou toute autre configuration que vous avez. $(Platform) équivaut à x86/x64/toutes les unités centrales.

Si votre configuration inclut un CPU quelconque, vous devrez mettre des guillemets simples autour de $(Configuration)

Consultez également les options de condition référencées par adrianbanks.

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