如何在Visual Studio中禁用对Nuget包的相对URL引用?

时间:2015-11-05 09:54:45

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

我有一个需要Nuget包的代码库。我还有一个需要引用相同Nuget包的应用程序。

如果我单独打开任一项目并使用Nuget Pacakge管理器将Nuget包添加到Visual Studio中的项目,则将其添加到[PackageName] \ Packages。这就是我所期望的。

但是,如果我同时在Visual Studio中打开这两个项目,VS会立即假设我想要一个"解决方案"这很好,它基本上是VS的组织事情,但现在添加包的方式更改第一个包仍然添加到[ProjectName] \ Packages但是当我从第二个项目引用它时,我得到一个参考路径。 [FirstProjectName] \包。

如果我偶然然后将Nuget包添加到第二个项目中,然后几分钟或几个月后将相同的Nuget包添加到第一个项目中,我现在反过来得到相同的参考混乱。快进几个月,项目结构相互依赖是参考网址的蜘蛛网。具有特定的文件结构依赖性。移动一个项目,删除它或者只是没有获得本地副本,因为你没有使用它,整个过程就是BOOM!

如果我打开1个项目或打开2,我如何禁用此功能并使添加包的功能相同。在这两种情况下,我都希望包安装在[ProjectName] \ Packages中,而不是第一次安装和引用第二。

注意:添加"广泛的解决方案"常见的nuget包目录正是我不想要的。每个项目都需要独立。能够编译和运行,而不依赖于项目目录之外的结构和项目显式引用的功能依赖项,用于开发。

2 个答案:

答案 0 :(得分:0)

使用Visual Studio工具时,NuGet不支持具有项目特定的包目录。

NuGet的packages目录由在Visual Studio中打开项目的当前解决方案定义。

packages目录可以隐式地是$(SolutionDir)\ p​​ackages目录,也可以是根据当前解决方案的目录找到的NuGet.Config文件定义的自定义路径。通过查看几个目录找到NuGet.Config文件,但它仍然由当前解决方案的位置驱动。

使用NuGet 3并引入project.json文件,您现在可以在没有将它们添加到项目文件的情况下获得引用,因此您不会遇到程序集的相对路径问题。但是并非所有项目都支持新的project.json。此外,您使用的是不支持NuGet 3的Visual Studio 2013。

所以你唯一的解决方法是:

  1. 为所有解决方案使用通用包目录。
  2. 确保所有解决方案都位于相对于项目文件的公共目录中。
  3. 编写一些实用程序,它会自动警告不正确的引用路径,或自动修复它们。
  4. 修改NuGet,使其支持您要执行的操作。

答案 1 :(得分:0)

我能够通过设置不同于我的项目的驱动器的存储库路径,或者将存储库路径设置为UNC路径来解决此问题。

我是通过编辑Nuget.Config文件(通常在%APPDATA%\ NuGet \ NuGet.Config中找到)并添加Repository Path设置来完成的。

请注意,我将D驱动器用于与代码相关的文件。

<config>
  <add key="repositorypath" value="\\localhost\d$\NuGet\packages" />
</config>