git - 使用 git 子模块时的 NuGet 自动包还原

标签 git visual-studio visual-studio-2013 nuget

我想了解在引用 Github 上托管的库时是否有任何方法可以依赖 Nuget 自动包还原。问题是当我将某些库添加为子模块时,它有自己的/packages/目录。但是,当我将该库中的 csproj 添加到我的解决方案中时,因为该子模块的/packages/目录中没有 DLL,构建失败。

显然,在我的机器上的简单修复是从我引用的子模块中打开 .sln 文件,进行构建。现在,从我的主要解决方案构建显然可以工作,因为子模块中的/packages/文件夹已填充。但是,这不是我可以在构建服务器上做的事情。

有什么方法可以在不完全搞乱子模块的情况下解决这个问题?我显然也不想更改子模块 .csproj,因为那样会使它与原点不同步。理想情况下,如果我可以指示 nuget 将引用的子模块 .csproj 的包 pull 到它自己的/packages/目录中,我会很高兴。

最佳答案

有两种类型的自动包恢复。一种是在 Visual Studio 中生成解决方案时触发的,另一种是基于 MSBuild 的,需要修改项目才能将 NuGet.exe 还原作为生成的一部分运行。通过选择启用 NuGet 包还原启用基于 MSBuild 的还原,但 NuGet 团队已弃用此选项。

对于构建服务器,您需要执行以下任一操作:

  1. 在运行构建之前为所有解决方案运行 NuGet.exe restore
  2. 在构建主解决方案时通过 MSBuild 恢复 NuGet 包。

要使用 MSBuild 恢复 NuGet 包,您可以使用已弃用的基于 MSBuild 的 NuGet 包恢复,或者更好的方法是创建 Before.YourSolution.sln.targets 文件,如 Ultimate Cross Platform NuGet Restore 中所述。邮政。自定义 Before....targets 文件需要为子模块恢复包。

如果您使用基于 MSBuild 的恢复,那么好处之一是在构建解决方案之前不需要有人运行预构建步骤,因为构建解决方案会进行恢复。基于 MSBuild 的包还原的问题之一,至少是在 Visual Studio 中选择启用 NuGet 包还原时启用的问题,是它可能会导致使用自己的自定义 MSBuild .targets 文件的 NuGet 包出现问题。

关于git - 使用 git 子模块时的 NuGet 自动包还原,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29174858/

相关文章:

visual-studio - 有没有办法从代码中判断应用程序是在 Visual Studio 2008 Express、Standard 还是 Pro 中开发的?

c# - 如何在 T4 模板中使用 C# v6 的最新功能?

c# - Unity3D调用外部dll

reactjs - Netlify/git LFS 退出状态 128

git - Homebrew 在安装过程中无法链接 Git

谁能指出是什么产生了这些错误的输出语句

c++ - std::make_pair C++11 + VS2013=编译器错误

xaml - 在 VS 2013 中或使用 Resharper 重新格式化 XAML

windows - 如何更改 git status 显示最终未提交的已修改文件的行为?

git - "git diff"、 "git diff HEAD"和 "git diff --staged"的奇怪输出?