web-dev-qa-db-ja.com

1つのソリューションで複数のプロジェクトから1つのNuGetパッケージを作成する

私が取り組んでいるソリューションには、4つのクラスライブラリプロジェクト(ABCD)が含まれています。 AおよびBは、ソリューションの最上位プロジェクトと見なすことができます。 ABはどちらもCを参照し、Dは独立しています。

これらの4つのプロジェクトは、自動ワークフローを処理するために私が作成したサービスのグループを表しています。これらはすべて密接に関連しており、1つの場所(サービスマネージャー)でのみ使用されるため、それらを異なるソリューションに分割したくありません。

私の問題は、4つすべてのライブラリを含む単一のNuGetパッケージを作成することです。それらをすべてビルドしてDLLを手動で収集する必要はありません。残りのプロジェクトをAまたはBで参照することで、技術的にこれを達成できることはわかっていますが、それは真の関係ではなく、避けるべきだと思います。

私はこの問題について多くの検索を行いましたが、手動でDLLを収集して自分でパッケージをビルドする以外に解決策を見つけることができません。 NuGetの機能を使用したい結果を得る方法はありますか?

[〜#〜] note [〜#〜]:タグが明確でない場合は、現在TeamCityビルドサーバーでVS2010を使用しています。必要に応じて、Stashサーバーを介してGitも使用しています。

[〜#〜] edit [〜#〜]:これは言及するのに十分重要であるかもしれないことに気づきました。これらのプロジェクトは、依存関係としてマークする必要がある他のNuGetパッケージを参照しています。

27
Logarr

独自のnuspecマニフェストを定義する必要があります。 filesセクションに含まれているアセンブリをリストできます。

<file src="A\bin\Release\A.dll" target="lib\net40" />
<file src="B\bin\Release\B.dll" target="lib\net40" />
...

詳細については NuSpecリファレンス を参照してください。

次に、そのnuspecファイルをprojではなくNuPackビルドステップで参照します。

17

ダウンロードした場合 NuGet.exe 実行できます:nuget pack Myproject.csproj -IncludeReferencedProjectsそして、これにはすべてのプロジェクトが含まれます。 NuGet docs からのメモは次のとおりです。

プロジェクトが他のプロジェクトを参照している場合は、パッケージの一部として、または-IncludeReferencedProjectsオプションを使用して依存関係として参照プロジェクトを追加できます。これは再帰的に行われます。たとえば、B.csprojとC.csprojを参照するプロジェクトA.csprojがあり、B.csprojがD.csprojとE.csprojを参照し、C.csprojがF.csprojとG.csprojを参照しているとします。次に、実行すると:

nuget pack A.csproj -IncludeReferencedProjects

生成されたパッケージには、プロジェクトAのファイルに加えて、プロジェクトB、C、D、E、F、Gのファイルが含まれます。

参照されるプロジェクトに同じ名前の対応するnuspecファイルがある場合、その参照されるプロジェクトは依存関係として代わりに追加されます。同じ例を使用して、プロジェクトファイルC.csprojと同じディレクトリにファイルC.nuspecがあるとします。実行すると:

nuget pack A.csproj -IncludeReferencedProjects

生成されたパッケージには、プロジェクトAのファイルに加えて、プロジェクトB、D、Eのファイルが含まれ、パッケージはCに依存します。

コマンドラインリファレンス も参照してください。

14
Que

これはおそらくこれを正確に解決します:nuget.exe pack proj.csproj -IncludeReferencedProjects

あなたは見ることができます: 複数のプロジェクトを含むソリューションのnugetパッケージを作成する

0
C.Frank