C# Visual Studio 2010使用第三方库的调试或发布版本编译,具体取决于我的项目是编译版本还是发布版本?
我已经为Visual Studio 2010/C下载了许多第三方库(DLL),我注意到在它们的发行版\bin目录中,它们通常有两个版本Debug和ReleaseC# 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)|$(
是否有一种方法可以将这些库添加为对项目的引用,但使用发布版本(当我构建发布时)和调试版本(当我调试时)?是的,但可能不是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>