ビルドプロセスの一部として NuGet パッケージの作成を自動化する 質問する

ビルドプロセスの一部として NuGet パッケージの作成を自動化する 質問する

NuGet 経由で配布するライブラリをビルドできるように、拡張したい自動ビルド プロセスがあります。現在、パッケージを作成するために nuget.exe を実行するのは手動操作です。

NuGet パッケージ (*.nupkg) ファイルが「リリース」ビルドの最終結果となるように VS 2010 を設定する最適な方法は何ですか?

一部のパッケージには他のファイル (コンテンツとツール) があることに留意してください。また、ほとんどの場合、.NET 4、Silveright、および Phone 7 をサポートするために、複数のプロジェクトを 1 つの NuGet パッケージに統合しています。

(既存の「自動化された」プロセスは、コマンド ラインを使用してソリューションを構築する単純なバッチ ファイル ランナーであることを明確にする必要があります。)

アップデート

問題が解決されていないため、このディスカッションを更新したいと思います。@pravin が提供したリンクは役に立ちますが、1 つのパッケージに複数のプロジェクトがあり、PowerShell スクリプト、構成、ソース コード変換などの他のコンテンツも含まれているという事実には対処していません。

最も良い例は、.NET 4 と Silverlight 5 の両方のバージョンを持つアセンブリです。これらは同じパッケージで配布されます。パッケージは 2 つのプロジェクトに依存しているため、ビルド後のイベントを使用してパッケージを作成することはできません。

ベストアンサー1

うまく機能する可能性のある方法の 1 つは、カスタム MSBuild .proj ファイルを作成することです。カスタム スクリプトでいくつかのターゲットを定義できます。最初のターゲットは、ソリューションのコンパイルを実行します。コンパイル後に実行する 2 番目のターゲットは、EXEC MSBuild タスクを使用して、nuget.exe コマンド ライン ユーティリティを呼び出します。次に、バッチ ファイル ランナーを更新して、カスタム プロジェクト ファイルを引数として指定して、msbuild 実行可能ファイルを実行します。バッチ スクリプトで既に MSBuild を使用している場合は、引数を交換するだけで済みます。カスタム proj ファイルをソリューションのソリューション項目に含めることができます。その場合、Visual Studio で外部ツール参照を簡単に追加して、カスタム スクリプトをすばやくテストし、期待どおりにパッケージがビルドおよび生成されることを確認できます。

サンプル MSBuild

これを出発点として使用できます:

<Project DefaultTargets="Compile" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
    <PropertyGroup>
      <SolutionFile></SolutionFile>
      <NugetExecutable>C:\PathToNuget\nuget.exe</NugetExecutable>
      <NuspecFile></NuspecFile>
    </PropertyGroup>

    <Target Name = "Compile">
        <MSBuild Projects="$(SolutionFile)" Properties="Configuration=Release" />
    </Target>

    <Target Name = "Package">
    <!-- You could use the MSBuild Copy task here to move the compiled code into
           a structure that fits your desired package format -->
      <Exec Command="&quot;$(NugetExecutable)&quot; pack $(NuspecFile)" />
    </Target>
</Project>

これを次のように呼び出します:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" Build.proj /p:SolutionFile=PathToSolution\App.sln;NuspecFile=foo.nuspec

おすすめ記事