19

启用 NuGet 包还原时,它会在我的解决方案中添加以下内容:

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

由于这些是我的解决方案的一部分,因此在没有这些文件的情况下将解决方案提交到我的存储库意味着我的解决方案中将缺少引用,但删除文件夹或这些文件中的任何一个意味着未启用 NuGet 包还原。

鉴于设置包还原的部分目的是让我不必将二进制文件提交到存储库,那么强制 NuGet.exe 进入解决方案的目的是什么?

是否假设将一个小的 .exe 提交到存储库是为了消除提交其他二进制文件的需要而付出的小代价?或者我是否应该也从存储库中排除这些并告诉开发人员第一次检查我的存储库并启用包还原?当持续集成在我的解决方案中遇到缺少引用时怎么办?

4

4 回答 4

14

将 .nuget 文件夹提交到存储库背后的意义在于,您可以使用启用此功能时安装的完全相同版本的 nuget.exe 来设置解决方案以使用包还原。

您的项目文件依赖于使用 nuget.exe 的 nuget.targets MSBuild 指令,并且这两个文件被视为链接在一起,因为 MSBuild 指令使用 nuget.exe API。完全有可能有一天会得到不同版本的 nuget.exe 和 nuget.targets。它在后台使用 NuGet.Build 和 NuGet.Commandline 包。这也是为什么通常为解决方案设置一次包还原,而不是由每个开发人员单独设置的原因。

此外,您无需在每个构建服务器上安装 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 解决方案,重新打开并构建它。Visual Studio 现在应该会自动下载 nuget.exe。

于 2012-11-06T09:49:49.893 回答
2

对于.gitignore,添加以下行。

.nuget/
!.nuget/packages.config
于 2014-11-08T13:36:17.463 回答