请问是否有办法将这些库添加为项目引用,但在构建发布版本时使用Release版本,在调试时使用Debug版本呢?
<Reference Include="MyLib">
<HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath>
</Reference>
您可以手动编辑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>
查看此文章以获取更多信息。
如果您使用发布文件夹和调试文件夹,那么WaffleSouffle的答案绝对是最好的,因为原始问题已经说明。
似乎还有另一种不太明显的选项,因为在编辑csproj文件时,VS(VS2010)没有在智能感知中显示它。
您可以将条件添加到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\Framework\v4.0.30319\MSBuild\Microsoft.Build.Core.xsd 和 C:\Windows\Microsoft.NET\Framework\v4.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>
搜索顺序在文件Microsoft.Common.targets中指定
参见:
Visual Studio中的HintPath vs ReferencePath
是的,但可能不能在VS2010内本地化。您可以编辑.csproj文件并使用条件属性来创建对发布版或调试版的引用。
<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>