nuget restore
とdotnet restore
はほぼ同じです。これらは、ナゲットの復元操作を実行します。
唯一の相違点:dotnet restore
は、dotnet msbuild /t:Restore
を呼び出す便利なラッパーで、msbuild-integrated復元を呼び出します。これはVS 2017(完全なVS、ビルドツール)またはMono 5.2+(=>msbuild /t:Restore
)やこの便利なコマンドを提供する.NET Core SDKなど、NuGetを含むmsbuildディストリビューションでのみ機能します。現時点で
、プロジェクトで使用することができますどのようにNuGetパッケージの2つの方法があります(図3は、実際にはなくのは一瞬UWPにproject.json
を無視してみましょう):
packages.config
:参照の「古典的」な方法NuGetパッケージ。これは、NuGetが別のツールであり、msbuildがNuGetについて何も知らないことを前提としています。 nuget.exe
やVS統合ツールなどのNuGetクライアントでは、packages.config
ファイルが表示され、参照パッケージを復元時にローカルフォルダにダウンロードします。パッケージインストールでは、このローカルフォルダからアセットを参照するようにプロジェクトが変更されます。そのため、packages.config
プロジェクトの復元はファイルをダウンロードするだけです。
PackageReference
:このプロジェクトには、NuGetパッケージを参照するMSBuildアイテムが含まれています。 packages.config
とは異なり、直接の依存関係のみが表示され、プロジェクトファイルはパッケージからアセット(dllファイル、コンテンツファイル)を直接参照しません。復元時に、NuGetは直接依存関係と推移依存関係を評価して依存関係グラフを把握し、すべてのパッケージがユーザーのグローバルパッケージキャッシュにダウンロードされるようにします(ソリューションはローカルではないため、一度だけダウンロードされます)。obj
フォルダプロジェクトに使用するすべてのパッケージとアセットのリストが含まれています。パッケージにプロジェクトに追加する必要のあるビルドロジックが含まれている場合は、msbuildターゲットも追加されます。したがって、ナゲットリストアは、グローバルキャッシュにない場合はパッケージをダウンロードし、このアセットファイルを作成します。パッケージ参照に加えて、プロジェクトは、プロジェクトディレクトリ内のdotnet
で利用可能な追加コマンドを含むNuGetパッケージであるCLIツールを参照することもできます。 packages.config
プロジェクトのため
MSBuildの統合のみ(デフォルトでは、.NETの標準、.NETのコアが、オプトインされている任意の.NETプロジェクトのために)PackageReference
タイプのプロジェクトのために働く復元しません。 nuget.exe
の新しいバージョン(たとえば4.3.0)を使用すると、両方のプロジェクトタイプを復元できます。
欠落しているタイプに関するエラーはもう少し面白いです: "リファレンスアセンブリ"(コンパイラへの入力として渡されるライブラリ)はシステムにインストールされていませんが、NuGetパッケージを経由します。したがって、NuGetパッケージがグローバルパッケージキャッシュにないか、またはリストア操作によってobj/project.assets.json
ファイルが生成されていない限り、System.Object
のような基本タイプはコンパイラで使用できません。
私は以来、DOTNETが働いて復元することを疑うが、nugetチーム市にそのnugetがない古いバージョンではありませんでしたPackageReferencesを理解する。 NuGetはバージョン4.0以上である必要があります。 –
私たちは同じ問題を抱えています。ドットネットリストアは動作しますが、ナゲットリストアは動作しません。そして私たちのために、それはTeamCityとローカルで起こっています。 – r12