私はいくつかの投稿を読みましたが (以下の参照を参照)、私の技術スタックに固有のベスト プラクティスに関するガイドをまだ見つけていません。
目標: MSBuild と NuGet を使用して、TeamCity を介して単一の .csproj ファイルから構築された複数の .NET フレームワークをターゲットとする単一の NuGet パッケージを作成します。
制約:
- コードを VCS から 1 回だけ引き出します。
- コンパイルされたすべてのアセンブリは、同じバージョンにする必要があります。
- 単一の .csproj (ターゲット フレームワークごとに 1 つではありません)。
私は2つのアプローチを念頭に置いています:
単一のビルド構成を作成します。これには、.NET 3.5 のコンパイル、.NET 4.0 のコンパイル、NuGet によるパックの 3 つのビルド ステップが含まれます。各ビルドステップは、最後の成功に左右されます。このアプローチで私が目にする唯一の実際の問題 (そして、私が気付いていない解決策があることを願っています) は、各ビルド ステップで独自のビルド パラメーター セット (たとえば、system.TargetFrameworkVersion と system.OutputPath) を指定する必要があることです。 NuGet パック ステップが .nuspec ファイルの Files セクションに基づいて実行できるように、DLL を配置する一意の場所 (例: bin\release\v3.5 および bin\release\v4.0)。
複数のビルド構成を作成します。上記のビルド手順ごとに 1 つのビルド構成。このアプローチでは、TargetFrameworkVersion と OutputPath ビルド パラメーターの問題を簡単に解決できますが、スナップショットの依存関係を作成し、ビルド間でアセンブリのバージョン番号を共有する必要があります。また、Enterprise ライセンスを持っているため、ビルド構成スロットを消費しますが、これは問題ありません (最適ではありません)。
オプション #1 は当然の選択のように思えます。オプション#2は汚いと感じます。
だから私の2つの質問は次のとおりです。
- ビルド ステップに固有のパラメーターを作成することはできますか?
- 3番目のより良いアプローチはありますか?
参考文献:
- 内部依存関係管理用のシンボルを使用したマルチフレームワーク NuGet ビルド
- Nuget - 複数のプロジェクトでソリューションをパックする (複数のフレームワークを対象とする)
- http://lostechies.com/joshuaflanagan/2011/06/23/tips-for-building-nuget-packages/
- http://msdn.microsoft.com/en-us/library/hh264223.aspx
- https://stackoverflow.com/a/1083362/607701
- http://confluence.jetbrains.com/display/TCD7/Configuring+Build+Parameters
- http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package