2013-04-08 11 views
16

私は、4つのクラスライブラリプロジェクト(A,、CD)を含む解決策を持っています。 AおよびBは、ソリューションのトップレベルプロジェクトと考えることができます。 ABの参照CDの両方が単独です。1つのソリューションで複数のプロジェクトから1つのNuGetパッケージを作成する

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

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

私はこの問題について多くの検索を行いました。手動でDLLを収集してパッケージを構築する以外の解決策は見つかりません。 NuGetの機能を使用したいという結果を達成する方法はありますか?

:タグが明確でない場合、私は現在TeamCityビルドサーバーでVS2010を使用しています。関係がある場合は、GitをStashサーバーにも使用しています。

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

+0

を、あなたは手順を構築するチームシティーNuGetパックを使用していますか? –

+0

@DavinTryon - この問題のためにTeamCityでプロジェクトをまだ設定していません。このソリューションのライブバージョンは実際には単一のプロジェクトであり、今はSVN/CC.NETにあります。 – Logarr

答えて

11

独自のnuspecマニフェストを定義する必要があります。あなたはfilesセクションのアセンブリを含む一覧表示することができます。詳細については

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

NuSpec referenceをお読みください。

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

9

ダウンロードした場合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.

に依存しているにもCommand line referenceを参照してください。 。

+1

私は実際にプロジェクトの構造を再設計することでこの問題を解決しました。あなたの答えは、あなたが説明したようなツリーではない私のプロジェクトで概説した実際のプロジェクト関係を無視します。 – Logarr

+2

@Logarr:解決方法を説明する回答を追加してもよろしいですか?ありがとう! –

+0

@Stécy - 私は試してみる。まず、私が言及していた解決策を覚えておかなければならない... – Logarr

関連する問題