【问题标题】:Is there a way to specify assembly references based on build configuration in Visual Studio?有没有办法根据 Visual Studio 中的构建配置指定程序集引用?
【发布时间】:2010-12-19 16:54:45
【问题描述】:

我有一个项目,通过他们的 API 为另一个应用程序添加了一些可扩展性。但是,我希望能够为他们的应用程序的多个版本使用同一个项目,因为大部分代码是相同的。

但是,应用程序的每个版本都需要引用该软件版本的正确程序集。他们将他们的程序集加载到 GAC 中,所以即使我可以根据构建配置指定要使用的程序集的 version,我也可以。有没有办法从 VS 内部执行此操作,还是需要外部构建工具?

【问题讨论】:

    标签: visual-studio build-process assemblies reference


    【解决方案1】:

    有一种方法可以做到这一点,但您必须手动编辑您的项目文件。项目文件可以在许多元素中应用Condition 属性,包括用于引用的元素。

    您可以将这些添加到您的参考文献中以指定何时使用参考文献:

    <Reference Include="Product, Version=1.0.0.0" Condition="'$(Configuration)'=='V1'">
    </Reference>
    <Reference Include="Product, Version=2.0.0.0" Condition="'$(Configuration)'=='V2'">
    </Reference>
    <Reference Include="Product, Version=3.0.0.0" Condition="'$(Configuration)'=='V3'">
    </Reference>
    

    然后您定义几个构建配置(V1V2V3),每个引用将仅包含在相关选择的构建配置中。

    将它与代码中的条件编译符号和#if 语句结合起来,您应该能够做您想做的事情。

    如果这样做,需要注意的一点是,Visual Studio 很容易从项目文件中删除条件属性。

    【讨论】:

    • 这很好用,赞不绝口。只要我不使用这些引用,包括函数式 Intellisense,即使 Visual Studio 也能很好地发挥作用!
    • 我使用类似的方法对参考的调试/发布版本进行配置特定参考。我只是在添加参考时指出了发布版本,然后在记事本中,将提示路径中的Release 替换为$(Configuration),瞧——参考自动更新为正确的目标配置!
    • @awe:在 MSBuild 文件中的大多数元素上放置 Condition 属性是有效的。
    • @adrianbanks:您是否知道什么会触发 Visual Studio 从项目文件中删除条件属性?我在 VS2012 中测试了添加新的 Reference,我的手动编辑没有受到影响。我使用您和 awe 建议的编辑进行了测试,保存项目后 Visual Studio 保持不变。
    • @WalterStabosz 抱歉,我不知道,虽然我想它不应该真的删除它们。
    【解决方案2】:
    <Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\SharedLibs\log4net\$(Platform)\$(Configuration)\log4net.dll</HintPath>
    </Reference>
    

    您可以将提示路径替换为属性:

    $(Configuration) 等效于 Release/Debug 或您拥有的任何其他配置。 $(Platform) 相当于 x86/x64/Any CPU

    如果您的配置包括任何 CPU,那么您需要在 $(Configuration) 周围加上单引号

    另请参考adrianbanks引用的条件选项

    【讨论】:

    • 感谢这对我有用,而 @adrianbanks 的解决方案在尝试构建时无法解析包
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2013-11-18
    • 2021-11-17
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多