NuGet自动包恢复给库带来了问题

时间:2015-04-01 14:20:34

标签: .net visual-studio-2012 nuget git-submodules git-subtree

使用版本2.7中添加的NuGet自动包还原时,NuGet会自动将所有缺失的包下载到位于解决方案级别的packages \文件夹中。当解决方案包含库(即git子树或git子模块)时,这会导致问题,因为库项目期望将包下载到位于各自解决方案文件夹中的packages文件夹(通常将其嵌套在主代码中的子文件夹中#39 ; s解决方案文件夹)并且不知道在主代码的解决方案文件夹中查找包。例如:

primary_code_folder\
->primary_code.sln
->packages\
    [various packages downloaded by NuGet]
->primary_code_project\
->library_solution_folder\
--->library_code.sln
--->packages\
      [where the library project expects packages to reside]
--->library_code_project\

可能的解决方案:

  1. 手动打开每个库项目.sln文件并构建项目以确保在每个库包文件夹中还原最新的包。这是不可取的,因为它要求每个开发人员记住每次有人更新/安装新软件包时都要这样做。
  2. 以某种方式配置每个库以查看主解决方案代码中的packages文件夹。这似乎是一个非常不受欢迎的修复,因为它修改了库的代码,使其对于正在使用的给定项目是唯一的。
  3. 配置主代码的解决方案,以便在预构建事件命令行命令中运行nuget.exe restore library_code.sln。但是,nuget.exe在解决方案中并不是自然而且并非(默认情况下)位于路径变量中。因此,似乎将nuget.exe复制到项目中可能会导致以后不兼容,因为更新不会被提取。也许有解决方法吗?
  4. 以某种方式配置NuGet在项目级别而不是解决方案级别存储包?
  5. 有人可以分享他们如何解决这个问题吗?这里提出了一个类似的问题(NuGet Automatic Package Restore when using git submodules),针对不同的情况,答案不能满足我在这篇文章中描述的需求。

1 个答案:

答案 0 :(得分:1)

这可以通过在存在sln的每个文件夹位置放置多个nuget.config文件来完成。

在nuget.config中,您需要添加以下内容

<config>
 <add key="repositoryPath" value="C:\Temp" />
</config>

<config>
 <add key="repositoryPath" value="..\..\.." />
</config> 

请点击此处了解更多详情https://docs.nuget.org/consume/nuget-config-settings