複数のプロジェクトを持つソリューション向けのNuGet


153

3つのプロジェクトを持つソリューションがあるとします。

  • UI
  • テスト

私が使用するNuGetパッケージの一部は、3つのプロジェクトすべてに適用されます。一部はUIとテストにのみ適用され、一部はテスト(NUnitなど)にのみ適用されます。

NuGetを使用してこれを設定する正しい方法は何ですか?

  1. リファレンスが必要なときはいつでも、3つのプロジェクトすべてで「ライブラリパッケージリファレンスの追加」を使用する必要がありますか?
  2. 初めてパッケージが必要になったときに「ライブラリパッケージ参照の追加」を使用してから、「参照の追加」->「参照」を使用して以降の使用方法を調べる必要がありますか?

どちらの場合も、packages.configファイルはいくつ必要ですか?

回答:


239

これを偶然見つけた人のために、次のオプションがあります:

ソリューションを右クリック>ソリューションのNuGetパッケージを管理...

...または:

ツール>ライブラリパッケージマネージャー>ソリューションのNuGetパッケージの管理...

また、[インストール済みパッケージ]領域に移動すると、ソリューションのすべてのプロジェクトにわたって単一のパッケージを「管理」できます。


5
ソリューションのパッケージを特定のバージョンでインストールする場合はどうすればよいですか。ウィザードは私にそのオプションを与えません。コンソールではそのように実行できますInstall-Package RazorEngine -Version 3.3.0が、コンソールのドロップダウンで選択されたプロジェクトにのみ適用されます。
MaciejLisCK 2014

これは、Visual Studio 2010でサポートされて私はここに質問を- stackoverflow.com/questions/33163987/...
user2645830

非常に大きなプロジェクトがある場合、依存関係を更新するパッケージマネージャーを本当に信頼しますか?
Mick

特定のパッケージに「管理」ボタンがない場合のアイデアはありますか?System.ServiceModelと同様に、このライブラリをソリューションビューから管理することはできません。
ホアンロング

@ミック、上記のダイアログの[統合]タブを確認してください...

76

コンソールを使用して複数のプロジェクトをターゲットにする

Tools > Library Package Manager > Package Manager Console

次に、このコマンドを使用します

Get-Project PROJECT-NAMES-WITH-COMMAS | Install-Package PACKAGENAME

例えば

Get-Project Core,UI | Install-Package FluentDateTime

4
+1:少なくとも現在のNuGetバージョンでは、「ソリューションのNuGetパッケージの管理」ダイアログよりもこの方法を優先します。ソリューションが非常に大きく、プロジェクト名のリストをそのダイアログに貼り付けることができないためです。
Yodan Tauber 2013

21

この甘い取引は私にとってはうまくいきます:

PM> Get-Project -all | where {$_.Name -match "Songhay.Silverlight" -and
    $_.Name -notmatch "ApplicationLoader" -and $_.Name -notmatch ".Xml"}
    | ForEach-Object {Install-Package MvvmLight -project $_.Name}

2
これがそのやり方です!:たとえば、あなたはこの試みる溶液中のすべてのプロジェクトのためのjson.netのすべてのバージョンを一覧表示したい場合Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -Filter Newtonsoft.Json}
jonypony3

1
@EdwardMMeshurisは非常に優れたコマンドですが、パッケージ名と完全に一致するわけではありません。完全に一致するように若干更新しましたGet-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' }
Dark_Knight

12

複数のソリューションにまたがってパッケージをインストールする場合は、それを行うための便利なPowershellスクリプトを作成しましたここを参照してください

Get-Project -Allコマンドをフィルタリングして、プロジェクトリストのサブセットをターゲットにすることもできます。


8

ソリューションのすべてのプロジェクトのすべての外部ライブラリには、「ライブラリパッケージリファレンスの追加」を使用する必要があります。プロジェクトごとにpackages.configが作成されます。

ただし、パッケージを1回だけダウンロードして、他のすべてのプロジェクトでローカルに再利用します。


4
注:すべてのライブラリパッケージを更新しないと、同じアセンブリの3つの異なるバージョンが作成されます。.NETは、GACにあるか、名前が異なる場合、3つの異なるバージョンで動作します。しかし、それらは同じ名前になるからです。古いバージョンが新しいバージョンにコピーされたため、ビルドが機能しなくなります。
11

2

ではパッケージマネージャコンソールは、次の書くことができますコマンドを

Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter 
PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' } | Install-Package 
PACKAGE_NAME -Version VERSION

そのコマンドをインストールまたは更新にも使用できます(Update-Package)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.