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

时间:2015-03-20 19:57:28

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

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

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

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

1 个答案:

答案 0 :(得分:1)

有两种类型的自动包恢复。在Visual Studio中构建解决方案时触发的一个,以及基于MSBuild的解决方案,需要修改项目以在构建过程中运行NuGet.exe还原。通过选择Enable NuGet Package Restore启用基于MSBuild的还原,但NuGet团队已弃用此功能。

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

  1. 在运行构建之前运行NuGet.exe restore以获取所有解决方案。
  2. 在构建主要解决方案时,让MSBuild恢复NuGet包。
  3. 要使用MSBuild恢复NuGet包,您可以使用不推荐使用的基于MSBuild的NuGet包还原,或者更好的方法是创建一个Before.YourSolution.sln.targets文件,如Ultimate Cross Platform NuGet Restore帖子中所述。自定义Before ....目标文件需要恢复子模块的包。

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