使用git子模块时NuGet自动包恢复

nik*_*3ro 5 git visual-studio nuget visual-studio-2013

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

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

有什么方法可以解决这个问题,而不会完全弄乱子模块?我显然也不想更改子模块.csproj,因为这会使它与origin不同步.理想情况下,如果我能指示nuget在其自己的/ packages /目录中提取引用的子模块.csproj的包,我会很高兴.

Mat*_*ard 1

自动包恢复有两种类型。一种是在 Visual Studio 中构建解决方案时触发的,另一种是基于 MSBuild 的,需要修改项目才能在构建过程中运行 NuGet.exe 还原。通过选择“启用 NuGet 包还原”来启用基于 MSBuild 的还原,但这已被 NuGet 团队弃用。

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

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

要使用 MSBuild 还原 NuGet 包,您可以使用已弃用的基于 MSBuild 的 NuGet 包还原,或者更好的方法是创建 Before.YourSolution.sln.targets 文件,如终极跨平台 NuGet 还原帖子中所述。自定义 Before....targets 文件需要恢复子模块的包。

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