NuGetで配布しているライブラリをビルドできるように、拡張したい自動ビルドプロセスがあります。現在、nuget.exeを実行してパッケージを作成するのは手動操作です。
NuGetパッケージ(* .nupkg)ファイルが "リリース"ビルドの最終結果になるようにVS 2010をセットアップする最良の方法は何ですか?
一部のパッケージには他のファイル(コンテンツとツール)があることに注意してください。そして、ほとんどの場合、複数のプロジェクトを単一のNuGetパッケージにマージして、.NET 4、Silveright、およびPhone 7をサポートしています。
(既存の「自動化された」プロセスは、コマンドラインを使用してソリューションを構築する単純なバッチファイルランナーであることを明確にする必要があります。)
[〜#〜] update [〜#〜]
この問題は解決されていないため、この議論を更新します。 @pravinが提供するリンクは役に立ちますが、単一のパッケージに複数のプロジェクトがあるだけでなく、PowerShellスクリプト、構成、ソースコード変換などの他のコンテンツがあるという事実には対応していません。
使用できる最良の例は、.NET 4とSilverlight 5の両方のバージョンを持つアセンブリです。これらは同じパッケージで配布されます。パッケージは2つのプロジェクトに依存しているため、ビルド後イベントを使用してパッケージを作成することはできません。
うまくいくかもしれないことの1つは、カスタムMSBuild .projファイルを作成することです。ソリューションでコンパイルを実行する最初のカスタムスクリプトで、2つのターゲットを定義できます。コンパイル後に実行する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=""$(NugetExecutable)" pack $(NuspecFile)" />
</Target>
</Project>
次に、これを次のように呼び出します。
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" Build.proj /p:SolutionFile=PathToSolution\App.sln;NuspecFile=foo.nuspec
私は現在のプロジェクトで既に達成したいことをしています:
すべてのアセンブリは、依存関係を備えた適切なnugetパッケージに組み込まれています。
Nugetパッケージを作成したいプロジェクトにパッケージフォルダーを作成することで解決しました。そこで、nupkgに関する必要な情報を使ってnuspecファイルを構成します
そこで、Nugetパッケージ構造に必要なすべてのフォルダーと不変のファイルを作成します。
パッケージフォルダーにビルドされたばかりのファイルをコピーし、nuget.exe
を実行するプロジェクトにポストビルドステップを追加しました
だからそうなるのです:
nuget.exe
を実行します。Nuget.exeは、システムの固定フォルダーにある必要がありますand buildserver(ダーティーソリューション)またはビルドに含まれている(ダーティーが少ない)必要があります。
ビルドスクリプト:
Xcopy.exe /Y "$(TargetPath)" "$(ProjectDir)\Package\Lib"
cd "$(ProjectDir)Package"
"$(TargetDir)..\Buildscripts\Nuget.exe" pack MyPackage.nuspec xcopy /Y *.nupkg "$(TargetDir)"
これを使用するには、nuget.exeをチェックインする場所を決定する必要があります。開発ツリーの最上位にbuildscriptsフォルダーを作成しました。
TFS 2010環境を使用している場合、 NuGetterプロジェクト は、nugetパッケージを自動的に作成する問題を解決するはずです。ビルド全体に対して1つのパッケージを作成します。実際には、いくつかの引数を指定してnuget.exeを呼び出してジョブを実行するTFS 2010ビルドワークフローです。
SlnにNuGet Powertoolsパッケージをインストールすると、nupkgを作成するためのビルドターゲットが追加され、CIを変更してそのタスクも実行します。 http://nuget.org/packages/NuGetPowerTools
十分に機能する可能性のある簡単な提案... Postbuildイベントとして.csprojファイルに入力するだけです:
<PropertyGroup>
<PostBuildEvent>$(SolutionDir)<YourPathToNugetHere>\NuGet.exe pack $(ProjectPath) -OutputDirectory ..\..\$(OutDir) -IncludeReferencedProjects -Symbols -Properties Configuration=$(Configuration)</PostBuildEvent>
</PropertyGroup>
これにより、カスタム.nuspecファイル(.csprojファイルのような名前を付ける必要があります)が収集され、.nupkgがビルドされます。
それでおしまい。
Visual Studioプロジェクトの設定内で簡単にこれを行うこともできます。
Nugetパッケージ CreateNewNuGetPackageFromProjectAfterEachBuild があります。 ドキュメント/プロジェクトサイト もあります
私の知る限り、あなたはそうすることはできません。
代わりに、適切に実行し、次のことを行うメインリポジトリへのコミット/プッシュでビルドスクリプトを起動する適切なビルド環境/プロセスを用意します。
TeamCity、CruiseControl.NET、または他のCIサーバーをVMまたは既存のビルドサーバーで実行できます。
'NuGet.for.MSBuild' nugetパッケージをインストールします。 「.nuspec」ファイルは不要で、必要な情報はAssemblyInfo.csから取得されます。
ビルドを「リリース」モードに設定します。ビルドされると、nupkgファイルは「bin/Release」フォルダーにあります。