NuGet包还原 - 解决方案中的.nuget文件夹 - 提交到存储库?

Nat*_*ley 19 nuget

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

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

由于这是我的解决方案的一部分,承诺解决我的仓库没有任何一个文件意味着我已经失踪我的解决方案的参考,但删除了文件夹或其中任何一个文件意味着NuGet包还原未启用.

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

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

Xav*_*ter 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包(检查它是否存在或者您是否指向正确的包源)

  • 此外,现在同意包恢复,您还需要检查是否已设置.http://blog.nuget.org/20120518/package-restore-and-consent.html (2认同)

Ric*_*lay 9

您不必将nuget.exe提交给源代码管理.如果缺少NuGet.targets从nuget.org下载最新的NuGet.exe.

  • @JerricLynsJohn这不是真的.您可以使用内部NuGet服务器或简单的网络共享来从中恢复NuGet包. (4认同)
  • @XavierDecoster没有互联网的构建服务器无法使用nuget下载软件包,更不用说nuget.exe了.从字面上看,构建服务器可能一无所获. (2认同)

Gan*_*Gan 7

如果你是以下@Richard绍洛伊的回答(未提交nuget.exe),并且因为某些原因的Visual Studio不会自动下载nuget.exe,请确保您有以下设置为在nuget.targets文件:

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

关闭VS解决方案,重新打开并构建它.Visual Studio现在应该自动下载nuget.exe.