Visual Studio 2010编译与debugging或发行版本的第三方库,取决于如果我的项目正在编译构build或发布?

我已经为Visual Studio 2010 / C#下载了许多第三方库(dll),并且我注意到,在他们的发行版\ bin目录中,他们通常有两个版本的Debug和Release。

有没有办法将这些库添加为项目的引用,但使用发布构build(当我构build一个版本),并使用debugging版本(当我debugging)?

您可以编辑csproj文件,手动设置包含引用的ItemGroup上的Condition属性。

<ItemGroup Condition="'$(Configuration)' == 'Debug'"> <Reference Include="MyLib"> <HintPath>..\..\Debug\MyLib.dll</HintPath> </Reference> </ItemGroup> <ItemGroup Condition="'$(Configuration)' == 'Release'"> <Reference Include="MyLib"> <HintPath>..\..\Release\MyLib.dll</HintPath> </Reference> </ItemGroup> 

请参阅这篇文章了解更多信息。

 <Reference Include="MyLib"> <HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath> </Reference> 

正如原始问题所述,WaffleSouffle的答案绝对是最好的,如果你使用Release-和Debug-文件夹。

似乎有另外一个选项不是那么明显,因为在编辑csproj文件时,VS(VS2010)不会在IntelliSense中显示它。

您可以将条件添加到HintPath元素。 喜欢这个:

 <Reference Include="MyLib"> <HintPath Condition="'$(Configuration)'=='Release'">..\lib\MyLib.dll</HintPath> <HintPath Condition="'$(Configuration)'=='Debug'">..\lib\Debug\MyLib.dll</HintPath> </Reference> 

我在http://blog.vivekrathod.com/2013/03/conditionally-referencing-debug-and.html发现了一篇由Vivek Rathod撰写的文章。

我在C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild \ Microsoft.Build.Core.xsd和:C:\ Windows \ Microsoft.NET \ Framework \ v4中检查了项目文件的XMS Schema文件.0.30319 \的MSBuild \ Microsoft.Build.Commontypes.xsd

我看不到Condition是HintPath元素的一个受支持的属性,但它似乎工作…..

编辑1:这不会使该参考在Visual Studio中出现两次,这是接受的答案的问题。

编辑2:其实,如果你忽略了HintPath,Visual Studio将在项目输出文件夹中查找。 所以你可以这样做:

 <Reference Include="MyLib"> <!-- // Removed HintPath, VS looks for references in $(OutDir) --> </Reference> 

search顺序在文件Microsoft.Common.targets中指定
请参阅: Visual Studio中的HintPath与ReferencePath

是的,但可能不是在VS2010内部。 您可以编辑.csproj文件并使用条件属性创build对发布或debugging的引用。

 <Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <HintPath>..\lib\Debug\MyLib.dll</HintPath> </Reference> 

要么

 <Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <HintPath>..\lib\Release\MyLib.dll</HintPath> </Reference>