当nuget在多个解决方案中引用或单独使用时,使nuget工作?

时间:2016-07-27 18:26:17

标签: visual-studio visual-studio-2015 nuget

我们在解决方案中有以下项目结构:

  

\ Project2的
   \ PROJECT1

Project2依赖于Project1。 Project1在多个项目中共享。当Project1成为此解决方案的一部分时,我为Project1添加了nuget包(例如Roslyn)。我们遇到的问题是,如果我们尝试自己编译Project1,或者在它完全在另一个应用程序中失败时编译它:

This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is ../../Project2/packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props.

如果我在文本编辑器中打开项目文件,它在项目文件中包含以下语句:

<Import Project="..\..\Project2\packages\Microsoft.Net.Compilers.1.2.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\Secured Account Access\Member\packages\Microsoft.Net.Compilers.1.2.2\build\Microsoft.Net.Compilers.props')" />

当然,如果删除了所有的nuget引用,那么只需打开单个项目并添加nuget引用。当我试图自己编译项目时解决了这个问题,当它成为解决方案的一部分时就解决了这个问题,因为VS在解决方案中将不再恢复Project1的软件包。

我不确定为什么VS / Nuget以这种方式工作。为什么不总是为每个项目都有一个包文件夹?磁盘空间节省(绝对没有)?您永远不应该有如下所示的引用:

../../Project2/Packages/MyNugetDepedency.dll

有没有什么方法可以解决这个问题,让一切正常。

1 个答案:

答案 0 :(得分:2)

packages文件夹由默认包含项目的解决方案确定。您可以通过在NuGet.Config文件中指定repositoryPath来覆盖默认包目录。

<configuration>
  <config>
    <add key="repositoryPath" value="../MyPackages" />
  </config>
</configuration>

要让多个解决方案共享相同的包目录,您可以在所有解决方案的父目录中创建具有repositoryPath设置的NuGet.Config文件。然后,NuGet将在每个目录中运行,直到找到NuGet.Config文件,然后使用在那里定义的repositoryPath。除非您指定了完整路径,否则此repositoryPath与NuGet.Config文件本身相关。相对路径可能是您想要的,因此其他开发人员不需要将源代码签出到同一目录。