1

アセンブリ参照の複雑なセットを持つ Visual Studio ソリューション ( TFS Aggregator ) があり、NuGet を使用して解決しようとしています。リファレンスは、.Net プラットフォームではなく、ターゲットの構成に依存します。

問題定義

ソリューションには多数のプロジェクトがあり、そのほとんどが共通のアセンブリ セットを参照しています。API の変更を公開するさまざまなアセンブリのバージョンがあります。ソース コードには、バージョンの違いを管理するための条件付きコンパイル #ifが散在しています。したがって、プロジェクトとソリューションにはいくつかの構成があります。プロジェクト参照は、構成によって異なります。

現在の状態

ソースでわかるように、すべてのプロジェクトは、 Chooseを使用していくつかの魔法を実行する共通の MSBuild ファイルをインポートし ます。参照アセンブリは、ソリューション レベルの共通フォルダーに存在する必要があり、各バージョンは異なるサブフォルダーにあります。

たとえば、ソースコードには

#if TFS2015 || TFS2015u1
using ILocationService = Microsoft.VisualStudio.Services.Location.Server.ILocationService;
#elif TFS2013
using ILocationService = Microsoft.TeamFoundation.Framework.Server.TeamFoundationLocationService;
#else
#error Define TFS version!
#endif

ソリューションにはDebug-2013、コンパイル シンボルを定義TFS2013し、MSBuild スニペットをインポートする構成があります。

<Reference Include="Microsoft.TeamFoundation.Server.Core, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <SpecificVersion>True</SpecificVersion>
      <HintPath>$(SolutionDir)References\2013\Microsoft.TeamFoundation.Server.Core.dll</HintPath>
</Reference>

正しいアセンブリ バージョンを指しています。同様のDebug-2015構成は、TFS2015コンパイル シンボルとインポートを定義します。

<Reference Include="Microsoft.TeamFoundation.Server.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>$(SolutionDir)References\2015\Microsoft.TeamFoundation.Server.Core.dll</HintPath>
</Reference>

現状のマイナス面

このソリューションの欠点は、参照フォルダーの管理です。すべての新しいクライアント マシンで、正しいファイルをコピーする必要があります。ビルド サーバーについても同様です。NuGet を使用してこの混乱を管理したいと考えています。

NuGet 試行 #1

.nuspec私はファイルでこれを試しました

<files>
    <file src=".\References\TfsReferences.target" target="content\References\TfsReferences.target" />
    <file src=".\References\2013\*.dll" target="content\References\2013" />
    <file src=".\References\2015\*.dll" target="content\References\2015" />
    <file src=".\References\2015.1\*.dll" target="content\References\2015.1" />
    <file src=".\References\2015.2\*.dll" target="content\References\2015.2" />
</files>

ただし、各プロジェクトで参照フォルダーの作成を終了し、条件付き参照を解決しません。

4

0 に答える 0