支持一个项目的 2 个以上版本
Supporting more then 2 versions of a project
目前我的项目支持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
正在加载不同的程序集。
根据新的需求,我需要添加对第3版本的支持。 (近期还会有)
我正在使用 TeamCity 创建最终用户获得的不同版本工件。
TeamCity 正在使用触发 msbuild 进程的构建步骤,
所以msbuild /p:Platform=x86
然后产生不同的工件
msbuild /p:Platform=x64
我考虑过创建一个名为 ver3
的新 Configuration
,就像 here 中描述的那样,
然后在项目文件中使用:
<Reference Include="SExtension" Condition="'$(Configuration)' == 'ver3'">
<HintPath>..\..\_libBinary\ver3\SExtension.dll</HintPath>
</Reference>
但我想这不是那个意思,所以我正在寻找其他解决方案。
如何支持第 3 版?
如果功能并不真正依赖于平台,那么基于平台在不同功能之间切换就没有什么意义,那只会让人感到困惑。相反,只需使用具有合适默认值的任意 属性 并将其传递到命令行。如果您将 属性 设置为需要从中提取 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个版本。
目前它是通过 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
正在加载不同的程序集。
根据新的需求,我需要添加对第3版本的支持。 (近期还会有)
我正在使用 TeamCity 创建最终用户获得的不同版本工件。
TeamCity 正在使用触发 msbuild 进程的构建步骤,
所以msbuild /p:Platform=x86
然后产生不同的工件
msbuild /p:Platform=x64
我考虑过创建一个名为 ver3
的新 Configuration
,就像 here 中描述的那样,
然后在项目文件中使用:
<Reference Include="SExtension" Condition="'$(Configuration)' == 'ver3'">
<HintPath>..\..\_libBinary\ver3\SExtension.dll</HintPath>
</Reference>
但我想这不是那个意思,所以我正在寻找其他解决方案。
如何支持第 3 版?
如果功能并不真正依赖于平台,那么基于平台在不同功能之间切换就没有什么意义,那只会让人感到困惑。相反,只需使用具有合适默认值的任意 属性 并将其传递到命令行。如果您将 属性 设置为需要从中提取 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