「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
Visual Studio の「NuGet パッケージの管理」画面で操作する。
[ツール]-[NuGet パッケージ マネージャー]-[ソリューションの NuGet パッケージの管理]
Visual Studio の「パッケージ マネージャー コンソール」でコマンドを送信
[ツール]-[NuGet パッケージ マネージャー]-[パッケージ マネージャー コンソール]
パッケージの更新 (Update-Package) を行うと、以下の操作が行われる。
(簡単のため、依存関係は省略している)
このため、NuGet パッケージについては、この
の整合性を保つため、コマンドを使用して NuGet 経由で管理することを基本とする。
(これらを手で編集することはオススメしない)
GAC に登録されるような従来のMicrosoft Windows Installerで配布されるようなパッケージは、今までどおり GAC に登録されているものを参照する。
GAC に登録されていないパッケージ (OSS ライブラリなど) は、もちろん個別にパッケージをダウンロードし、それを参照することもできる。
しかし、そのパッケージが NuGet に登録されていれば、NuGet のメリットを享受するために NuGet 経由でインストールするのが良いのではないかと思われる。
GAC にも NuGet にも登録されていないパッケージを使用する場合は、個別にダウンロードし、プロジェクトから参照させる。
NuGet でインストールしたパッケージ (*.dll) は、GAC には含まれない。
このため、NuGet でインストールしたパッケージをアプリケーションで使用する場合、「ローカルコピー」は必ず「True」にしておくこと。
消したパッケージが自動的に復元され、ビルドは正常終了する。
パッケージの復元は、Visual Studio や、MSBuild でビルドした際、
足りないパッケージを自動的に NuGet サイトからダウンロードする機能である。
さらに、MSBuild などのコマンドラインツールでのビルド時に、足りないパッケージをダウンロードするには、以下の設定を行う。
これにより、ソリューションフォルダ直下に「.nuget」フォルダができ、
コマンドラインツールでのビルド時でも、足りないパッケージがあれば、
ダウンロードしてくれる(MSBuild だけでなく、devenv によるビルドでも有効)。
※ この動作は、Visual Studio 2015 (NuGet 2.7) で変更されている。
上記と同様、パッケージが復元され、ビルドは正常終了する。
同様に参照設定との整合性が崩れる。
NuGetは、Install-Packageを行った際に、バージョン間の問題を解決するために、
"assemblyBinding -> dependentAssembly -> bindingRedirect" を追加する。
このため、
によってpackageのバージョンを変更した場合、問題を起こすことがある。
この場合、一度、assemblyBinding sectionを削除した後に、
Add-BindingRedirect?を実行して、bindingRedirectを再生成する。
<?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositoryPath" value=".\sharedpackages" /> </config> </configuration>
で、対応ができる。
フォルダ/ファイル名 種類 ----------------------------------------------------------------------------------------------------- Root1 <Dir> ├ ClassLibrary <Dir> | ├ ClassLibrary1 <Dir> | | ├ Properties <Dir> | | | └ AssemblyInfo.cs <File> | | ├ Class1.cs <File> | | ├ ClassLibrary1.csproj <File> | | └ packages.config <File> | ├ ClassLibrary2 <Dir> | | ├ Properties <Dir> | | | └ AssemblyInfo.cs <File> | | ├ Class1.cs <File> | | ├ ClassLibrary2.csproj <File> | | └ packages.config <File> | └ ClassLibrary.sln <File> ├ ConsoleApp1 <Dir> | ├ ConsoleApp1 <Dir> | | ├ Properties <Dir> | | | └ AssemblyInfo.cs <File> | | ├ App.config <File> | | ├ ConsoleApp1.csproj <File> | | ├ packages.config <File> | | └ Program.cs <File> | └ ConsoleApp1.sln <File> ├ sharedpackages <Dir> | └ Newtonsoft.Json.10.0.3 <Dir> | ├ lib <Dir> | ├ tools <Dir> | ├ LICENSE.md <File> | └ Newtonsoft.Json.10.0.3.nupkg <File> └ nuget.config <File>
NuGet自体のバージョンを(NuGet 2.7以降に)上げると、リストア方法も変更になる。
この場合、以下のように、リストア方法をマイグレーションする必要がある。
Visual Studio 2017からは、packages.configではなく、
Projectファイルに統合されたPackage Reference を使用できる。
<PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup>
現在登録されている NuGet パッケージを検索可能
NuGet の機能や使い方などのドキュメントを閲覧可能 (英語)