.net - 使 .NET 引用依赖于配置

标签 .net visual-studio

我的应用程序有多种配置来进行调试/发布版本以及 32 位和 64 位版本。现在,对于 32 位和 64 位构建,我需要引用不同的 dll(即那些使用 x86 构建的和那些使用 x64 构建的),但这些引用对于我的项目来说似乎是全局的,并且不依赖于配置。现在,当我从 32 位构建切换到 64 位构建时,我总是必须交换引用(反之亦然)。对于不同的配置实现不同的引用的适当方法是什么?

最佳答案

这可以通过对项目文件进行一些手动操作来完成。

首先,您需要右键单击该项目,然后单击卸载项目。然后再次右键单击它并选择编辑[项目名称]

当它加载到编辑器中时,您将看到各种引用条目:

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

请注意,无法通过 UI 执行此操作,因此您必须手动管理这些引用列表(例如,如果您需要添加另一个引用)。

另请注意,这不是黑客攻击...它只是利用 features of MSBuild 之一(VS 使用它来构建您的项目)。您可以使用任何您喜欢的表达式来拥有任意数量的 ItemGroup 列表 - 如果它没有表达式,那么它将始终包含在构建中。

关于.net - 使 .NET 引用依赖于配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15200022/

相关文章:

c# - 调整数组大小会调用 GC 吗?

visual-studio - 自定义 Visual Studio 项目模板中缺少文件夹

visual-studio - 如何在 Visual Studio 中更改偶数行背景颜色?

c++ - Visual Studio - 使调试构建严格

c# - 如何压缩两个不同大小的列表以创建一个与原始列表中最长的列表相同的新列表?

c# - 从代码中获取 dll 引用的项目名称

c# - 简单注入(inject)器的工厂设施

c# - 使用 protobuf-net 进行质量过滤

visual-studio - 如何在解决方案中找到未使用的 NuGet 包?

c++ - 如何在 Visual Studio 2017 中重新启用格式