Visual Studio 2010使用Debug或Release版本的第三方库进行编译,具体取决于我的项目是否正在编译Build或Release?

时间:2011-03-30 19:28:23

标签: c# visual-studio-2010 dll release-management

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

有没有办法将这些库添加为项目的引用,但是使用Release构建(当我构建版本时),并使用Debug构建(当我调试时)?

4 个答案:

答案 0 :(得分:63)

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

答案 1 :(得分:37)

您可以编辑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>

有关详细信息,请参阅this article

答案 2 :(得分:8)

如原始问题所述,如果您使用Release-和Debug-文件夹,WaffleSouffle的答案肯定是最好的。

似乎还有另一种选择并不那么明显,因为VS(VS2010)在编辑csproj文件时没有在IntelliSense中显示它。

您可以将条件添加到HintPath元素。像这样:

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

我在Vivek Rathod发现了一篇文章,在http://blog.vivekrathod.com/2013/03/conditionally-referencing-debug-and.html描述了上述方法。

我在以下位置检查了项目文件的XMS Schema文件:  C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \的MSBuild \ Microsoft.Build.Core.xsd 和: C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \的MSBuild \ Microsoft.Build.Commontypes.xsd

我看不出Condition是HintPath-element的受支持属性,但它似乎确实有用......

编辑1: 这不会使引用在Visual Studio中显示两次,这是接受的答案的问题。

编辑2: 实际上,如果省略HintPath,Visual Studio将查看项目输出文件夹。所以你实际上可以这样做:

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


搜索顺序在文件 Microsoft.Common.targets 中指定 看到: HintPath vs ReferencePath in Visual Studio

答案 3 :(得分:0)

是的,但可能不是VS2010内部原生的。您可以编辑.csproj文件并使用Condition属性创建对Release或Debug的引用。

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