19

NuGet パッケージの復元を有効にすると、ソリューションに以下が追加されます。

/.nuget
/.nuget/NuGet.exe
/.nuget/NuGet.targets

これらは私のソリューションの一部であるため、これらのファイルのいずれも使用せずにソリューションをリポジトリにコミットすると、ソリューションに参照が不足することになりますが、フォルダーまたはこれらのファイルのいずれかを削除すると、NuGet パッケージの復元が有効になりません。

パッケージの復元を設定するポイントの一部は、バイナリをリポジトリにコミットする必要がないようにすることだとすると、ソリューションに NuGet.exe を強制する意図は何ですか?

1 つの小さな .exe をリポジトリにコミットすることは、他のバイナリをコミットする必要性をなくすために支払う代償が小さいという前提ですか? それとも、これらをリポジトリからも除外し、初めてリポジトリをチェックアウトする開発者に、パッケージの復元を有効にするように指示する必要がありますか? 継続的インテグレーションでソリューション内の欠落参照が発生した場合はどうなりますか?

4

4 に答える 4

14

.nu​​get フォルダーをリポジトリにコミットすることの背後にあるポイントは、この機能を有効にしたときにインストールしたまったく同じバージョンの nuget.exe を使用して、パッケージの復元を使用するようにソリューションをセットアップできることです。

プロジェクト ファイルは、nuget.exe を使用する nuget.targets MSBuild 命令に依存します。MSBuild 命令は nuget.exe API を使用するため、両方のファイルはリンクされていると見なされます。ある日、異なるバージョンの nuget.exe と nuget.targets になる可能性は十分にあります。内部で NuGet.Build および NuGet.Commandline パッケージを使用します。これが、パッケージの復元が通常、すべての開発者が個別に行うのではなく、ソリューションに対して 1 回設定する理由でもあります。

また、各ビルド サーバーに nuget.exe をインストールする必要はなく、ビルド サーバーはさまざまなバージョンの nuget.exe を使用してソリューションをビルドできます。これは、追加の作業を必要としない追加の利点です。そして、はい、それを支払うのも小さな代償だと考えることができます:-)

CI で参照の欠落が発生した場合は、次の点を確認してください。

  • ビルド サーバーが NuGet パッケージ ソースに到達できません
  • ビルド サーバーが NuGet パッケージ ソースで NuGet パッケージを見つけることができません (パッケージがあるかどうか、または正しいパッケージ ソースを指しているかどうかを確認してください)。
于 2012-05-11T06:05:03.510 に答える
9

nuget.exe をソース管理にコミットする必要はありません。NuGet.targets は、見つからない場合、nuget.org から最新の NuGet.exe をダウンロードします。

于 2012-08-22T05:09:23.173 に答える
8

@Richard Szalayの回答(nuget.exeをコミットしない)に従っていて、何らかの理由でVisual Studioがnuget.exeを自動的にダウンロードしない場合は、nuget.targetsファイルで次の値がtrueに設定されていることを確認してください。

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

VSソリューションを閉じ、再度開いてビルドします。VisualStudioはnuget.exeを自動的にダウンロードする必要があります。

于 2012-11-06T09:49:49.893 に答える