支持超过 2 个版本的项目

Posted

技术标签:

【中文标题】支持超过 2 个版本的项目【英文标题】:Supporting more then 2 versions of a project 【发布时间】:2017-04-07 03:21:17 【问题描述】:

目前我的项目支持2个版本,现在假设支持3个版本。

目前它是通过x86x64 在它们之间切换时完成的,在我的项目文件中我有条件加载不同的程序集,例如:

版本 1

<Reference Include="SExtension" Condition="'$(Platform)' == 'x64'">
   <HintPath>..\..\_libBinary\ver1\SExtension.dll</HintPath>
</Reference>

版本 2

<Reference Include="SExtension" Condition="'$(Platform)' == 'x86'">
   <HintPath>..\..\_libBinary\ver2\SExtension.dll</HintPath>
</Reference>

所以根据平台x86x64 正在加载不同的程序集。

根据新的需求,我需要添加对第三版的支持。 (在不久的将来会有另一个)

我正在使用 TeamCity 创建最终用户获得的不同版本工件。

TeamCity 正在使用触发 msbuild 过程的构建步骤,

所以msbuild /p:Platform=x86 然后产生不同的工件 msbuild /p:Platform=x64

我想过创建一个新的Configuration,命名为ver3,就像here 中的描述一样, 然后在项目文件中使用:

<Reference Include="SExtension" Condition="'$(Configuration)' == 'ver3'">
    <HintPath>..\..\_libBinary\ver3\SExtension.dll</HintPath>
</Reference>

但我想这不是为了那个,所以我正在寻找其他解决方案。

如何支持第三版?

【问题讨论】:

【参考方案1】:

如果功能并不真正依赖于平台,那么基于平台在不同功能之间切换是没有意义的,这只是令人困惑。相反,只需使用具有合适默认值的任意属性并将其传递到命令行。如果您将该属性设置为需要从中提取 SExtension 的目录的名称,您甚至不需要这里的条件:

<!-- Put this at the Project Tag level, before the location where it's used -->
<PropertyGroup>
  <!-- Defaults to ver1 if not specified at all -->
  <ExtensionVersion Condition="'$(ExtensionVersion)'==''">ver1</ExtensionVersion>
</PropertyGroup
...
<Reference Include="SExtension">
  <HintPath>..\..\_libBinary\$(ExtensionVersion)\SExtension.dll</HintPath>
</Reference>

照常修改属性:

msbuild  /p:ExtensionVersion=ver3

【讨论】:

以上是关于支持超过 2 个版本的项目的主要内容,如果未能解决你的问题,请参考以下文章

同项目支持3.0及以下版本

如何调整LISTAGG以在选择查询中支持超过4000个字符?

Node.js 4.0.0 正式发布了

一文教你使用 Jenkins 设计多环境多项目持续集成环境!

Firebase主机在同一个项目中支持多少个域名(不是子域名)?

基于基本 HTTP 绑定的 SelfHosted WCF 服务不支持超过 1000 个并发请求