有没有一种方法来指定基于Visual Studio中的生成configuration的程序集引用?

我有一个项目,通过他们的API为另一个应用程序增加了一些可扩展性。 但是,我希望能够为其应用程序的多个版本使用相同的项目,因为大部分代码是相同的。

但是,每个版本的应用程序都需要参考该版本软件的正确汇编。 他们将程序集加载到GAC中,所以即使我可以根据构buildconfiguration来指定要使用的程序集版本 ,我也没关系。 有没有办法从VS内部做到这一点,或者我需要一个外部构build工具?

有办法做到这一点,但你将不得不手工编辑你的项目文件。 项目文件可以在许多元素中应用一个Condition属性,包括用于引用的元素。

您可以将这些添加到您的引用来指定何时应该使用引用:

 <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> 

然后定义几个构buildconfiguration( V1V2V3 ),每个引用将仅包含在相关的选定构buildconfiguration中。

将这个与代码中的条件编译符号和#if语句结合起来,你就可以做你想做的事情。

如果你这样做的话,要小心一点,就是Visual Studio很容易从项目文件中删除条件属性。

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

您可以用属性replace提示path:

$(configuration)相当于发布/debugging或任何其他configuration。 $(Platform)相当于x86 / x64 / Any CPU

如果你的configuration包括任何CPU,那么你将需要把单引号$(configuration)

另请参阅adrianbanks引用的条件选项