我的应用程序有几个配置可以进行调试/发布构建,还有32位和64位构建。现在使用32位和64位构建,我需要引用不同的dll(即使用x86构建的那些和使用x64构建的那些),但引用似乎对我的项目是全局的,并且不依赖于配置。现在,当我从32位切换到64位构建时,我总是必须交换引用(反之亦然)。为不同配置实现不同引用的适当方法是什么?
答案 0 :(得分:2)
这可以通过对项目文件进行一些手动操作来完成。
首先,您需要右键单击该项目,然后单击卸载项目。然后再次右键单击它并选择编辑[项目名称] 。
当它在编辑器中加载时,您将看到您的引用的各种条目:
<ItemGroup>
<Reference Include="System.Xml" />
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Common\Lib\3rdParty\Prism\4.0\Desktop\Microsoft.Practices.ServiceLocation.dll</HintPath>
</Reference>
</ItemGroup>
请注意,它们位于ItemGroup
节点内。
你现在可以执行一些魔法......为你的ItemGroup添加一个表达式,这样只有在构建配置有一定的位数时才使用它:
<ItemGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<!-- these are the references used when there is a Release x86 build -->
<Reference Include="System.Xml" />
</ItemGroup>
请注意,无法通过用户界面执行此操作,因此您必须手动管理这些参考列表(例如,如果您需要添加其他参考)。
另请注意,这不是一个黑客...它只是使用features of MSBuild之一(VS用来构建您的项目)。您可以使用任何您喜欢的表达式来拥有这些ItemGroup
列表中的任意数量 - 如果它没有表达式,那么它将始终包含在构建中。
答案 1 :(得分:1)
您可以在配置和/或平台上对csproj的任何部分进行条件限制,这样您就可以将引用放在单独的部分中。请注意,我认为即使没有任何更改,这也会强制每次重建,因为VS无法确定是否需要重建。可能不是问题,但它会增加编译时间。
e.g。
<ItemGroup Condition=" '$(Platform)' == 'x86' " >
<Reference ...86bit DLL... >
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x64' " >
<Reference ...64bit DLL... >
</ItemGroup>
我认为如果签名中的任何内容都没有变化,我可以选择使引用的提示路径有条件,但我不记得了。
答案 2 :(得分:0)