C# Visual Studio 2010使用第三方库的调试或发布版本编译,具体取决于我的项目是编译版本还是发布版本?

C# Visual Studio 2010使用第三方库的调试或发布版本编译,具体取决于我的项目是编译版本还是发布版本?,c#,visual-studio-2010,dll,release-management,C#,Visual Studio 2010,Dll,Release Management,我已经为Visual Studio 2010/C下载了许多第三方库(DLL),我注意到在它们的发行版\bin目录中,它们通常有两个版本Debug和Release 是否有一种方法可以将这些库添加为对项目的引用,但使用发布版本(当我构建发布时)和调试版本(当我调试时)?是的,但可能不是VS2010内部的本地版本。您可以编辑.csproj文件并使用条件属性创建要发布或调试的引用 <Reference Include="MyLib" Condition=" '$(Configuration)|$(

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


是否有一种方法可以将这些库添加为对项目的引用,但使用发布版本(当我构建发布时)和调试版本(当我调试时)?

是的,但可能不是VS2010内部的本地版本。您可以编辑.csproj文件并使用条件属性创建要发布或调试的引用

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

..\lib\Debug\MyLib.dll


..\lib\Release\MyLib.dll

您可以编辑csproj文件,在包含引用的项目组上手动设置条件属性

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

..\..\Debug\MyLib.dll
..\..\Release\MyLib.dll
有关更多信息,请参阅。


<Reference Include="MyLib">
   <HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath>
</Reference>
..\lib\$(配置)\MyLib.dll
如果您使用发行版和调试文件夹(如原始问题所述),那么华夫饼干的答案肯定是最好的

似乎还有另一个不太明显的选项,因为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>

..\lib\MyLib.dll
..\lib\Debug\MyLib.dll
我在网站上找到了Vivek Rathod的一篇文章,描述了上述方法

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

我看不出该条件是HintPath元素支持的属性,但它似乎确实有效

编辑1: 这不会使引用在VisualStudio中出现两次,这是一个公认答案的问题

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

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


搜索顺序在文件Microsoft.Common.targets中指定 见:

@PHeilberg当我保存我的.csproj文件时,它不会覆盖此设置,对吗?@leeand00:不,它将保留您在Visual Studio中加载的设置。如果使用VS open对其进行更改,则会提示您重新加载解决方案以应用更改。应用“条件”属性时有点混淆的一点是,该引用将在VS中显示两次,但实际上只会应用符合当前配置的引用。在某些情况下,csproj的另一个变化可能是在dll的HintPath中插入配置变量,如:…\..\$(配置)\MyLib.dlld最好的答案是,它的效果非常好。我尝试了一个标记为正确的,但它不起作用(我在VS2017中有两个参考号和一个WITH感叹号)
<Reference Include="MyLib">        
     <!-- // Removed HintPath, VS looks for references in $(OutDir) --> 
</Reference>