启用 NuGet 包还原时,它会在我的解决方案中添加以下内容:
/.nuget
/.nuget/NuGet.exe
/.nuget/NuGet.targets
由于这些是我的解决方案的一部分,因此在没有这些文件的情况下将解决方案提交到我的存储库意味着我的解决方案中将缺少引用,但删除文件夹或这些文件中的任何一个意味着未启用 NuGet 包还原。
鉴于设置包还原的部分目的是让我不必将二进制文件提交到存储库,那么强制 NuGet.exe 进入解决方案的目的是什么?
是否假设将一个小的 .exe 提交到存储库是为了消除提交其他二进制文件的需要而付出的小代价?或者我是否应该也从存储库中排除这些并告诉开发人员第一次检查我的存储库并启用包还原?当持续集成在我的解决方案中遇到缺少引用时怎么办?
最佳答案
将 .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 文件夹 - 提交到存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545687/