启用NuGet包还原时,它会将以下内容添加到我的解决方案中:
/.nuget
/.nuget/NuGet.exe
/.nuget/NuGet.targets
由于这些是我的解决方案的一部分,在没有这些文件的情况下将解决方案提交到我的存储库意味着我将在我的解决方案中缺少引用,但删除文件夹或这些文件中的任何一个意味着未启用NuGet包还原 .
鉴于设置包恢复的部分原因是我不必将二进制文件提交到存储库,那么迫使NuGet.exe进入解决方案的目的是什么?
假设将一个小的.exe提交到存储库是一个很小的代价,以消除提交其他二进制文件的需要吗?或者我是否应该从存储库中排除这些并告诉开发人员第一次检查我的存储库并启用包恢复?当持续集成在我的解决方案中遇到缺少的引用时怎么办?
4 回答
将.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包(检查它是否's there or whether you'指向正确的包源)
您不必将nuget.exe提交给源代码管理 . 如果缺少NuGet.targets从nuget.org下载最新的NuGet.exe .
如果您正在关注@Richard Szalay的回答(不提交nuget.exe),并且由于某些原因Visual Studio不会自动下载nuget.exe,请确保在nuget.targets文件中将以下内容设置为 true :
关闭VS解决方案,重新打开并构建它 . Visual Studio现在应该自动下载nuget.exe .
对于
.gitignore
,请添加以下行 .