0

現在、私のプロジェクトは 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

describe のような新しいConfiguration名前を作成して、プロジェクト ファイルで次のように使用することを考えましたver3

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

しかし、それはそれを意図したものではないと思うので、他の解決策を探しています。

3 番目のバージョンをサポートするにはどうすればよいですか?

4

1 に答える 1

0

機能がプラットフォームに実際に依存していない場合、プラットフォームに基づいて異なる機能を切り替えることはほとんど意味がありません。それは混乱を招くだけです。代わりに、適切なデフォルトで任意のプロパティを使用し、コマンドラインで渡します。そのプロパティを 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
于 2016-11-23T10:10:52.057 に答える