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