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

标签 nuget

启用 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 包源上找不到 NuGet 包(检查它是否存在或您是否指向正确的包源)
  • 关于NuGet 包还原 - 解决方案中的 .nuget 文件夹 - 提交到存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545687/

    相关文章:

    c# - NuGet 包无法找到并使用自己的 DLL

    asp.net-core - .net 核心 (csproj) global.json 'projects' 等效

    c# - 如何在没有互联网的情况下在树莓派上包含 nuget 包?

    c# - 如何在 Visual Studio 中解析 "NuGet package restore failed"?

    docker - Gitlab CI docker环境下无法恢复mono项目的nuget包

    c# - 从 .NET 查看的命名空间列表中删除 MyCompany.Task

    nuget - 创建 NuGet 包,用于安装将 Copy Local 设置为 false 的引用

    nuget - 停止支持 NuGet 包

    visual-studio - 在解决方案中的新项目中安装 nuget 包,其中包已用于现有项目

    visual-studio - 如何在项目的预构建事件中解析Nuget包版本和路径?