代码之家  ›  专栏  ›  技术社区  ›  E.Meir

支持一个项目的两个以上版本

  •  0
  • E.Meir  · 技术社区  · 9 年前

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

    目前正在通过 x86 & x64 当我在它们之间切换时 项目文件 我有加载不同程序集的条件,例如:

    Ver1

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

    Ver2

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

    x86 x64 正在加载其他程序集。

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

    我使用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 回复  |  直到 9 年前
        1
  •  0
  •   stijn    9 年前

    如果功能不真正依赖于平台,那么在基于平台的不同功能之间切换是没有意义的,这只是令人困惑。相反,只需使用具有适当默认值的任意属性,并将其传递到命令行。如果您将该属性设置为需要从中提取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