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

Visual studio 如何在VisualStudio中禁用Nuget包的相对URL引用?,visual-studio,visual-studio-2013,nuget,Visual Studio,Visual Studio 2013,Nuget,我有一个需要Nuget包的代码库。我还有一个应用程序需要引用相同的Nuget包 如果我单独打开任何一个项目,并使用Nuget Pacakge manager将Nuget包添加到Visual Studio中的项目,则会将其添加到[PackageName]\Packages。这正是我所期望的 但是,如果我同时在visual Studio中打开两个项目,VS会立即假定我想要一个“解决方案”,这很好,这基本上是VS的组织工作,但现在添加包的方式发生了变化,第一个包仍然添加到[ProjectName]\p

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

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

但是,如果我同时在visual Studio中打开两个项目,VS会立即假定我想要一个“解决方案”,这很好,这基本上是VS的组织工作,但现在添加包的方式发生了变化,第一个包仍然添加到[ProjectName]\packages,但当我从第二个项目引用它时,我得到的引用路径是。。[FirstProjectName]\Packages

如果我可能会在第二个项目中添加一个Nuget包,然后在几分钟或几个月后将相同的Nuget包添加到第一个项目中,那么我现在得到了相反的相同引用混乱。快进几个月,项目结构的相互依赖性是一个由引用URL组成的蜘蛛网。具有特定的文件结构依赖性。移动项目,删除它,或者只是不获取本地副本,因为你没有使用它,整个事情都会轰隆一声

无论打开1个项目还是打开2个项目,如何禁用此功能并使添加程序包的功能相同。在这两种情况下,我都希望程序包安装在[ProjectName]\packages中。第一次安装时,程序包不会安装,第二次则会引用


注意:添加“解决方案范围”公共nuget包目录正是我不想要的。每个项目都需要是独立的。能够编译和运行,而不依赖于项目目录和功能依赖之外的结构(由项目显式引用),以进行开发。

不支持具有特定于项目的包目录在使用VisualStudio工具时使用NuGet编辑

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

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

通过NuGet 3和project.json文件的引入,您现在可以拥有引用,而无需将它们添加到项目文件中,这样就不会出现程序集的相对路径问题。但是,并非所有项目都支持新的project.json。此外,您使用的Visual Studio 2013不支持NuGet 3

因此,您唯一的解决办法是:

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

  • 我可以通过将存储库路径设置为与我的项目不同的驱动器,或者将存储库路径设置为UNC路径来解决这个问题

    我通过编辑我的Nuget.Config文件(通常在这里找到%APPDATA%\Nuget\Nuget.Config)并添加存储库路径设置来实现这一点

    请注意,我使用D驱动器处理与代码相关的文件

    
    
    说Nuget不支持它有点牵强Nuget Restore和Add命令行命令工作正常,可以恢复到指定的目录。VS插件可以在单个目标上正常工作。问题不在于Nuget,而在于Visual Studio插件。@David-关于命令行Nuget.exe的公平点。Th使用命令行的问题是,当使用
    NuGet.exe安装包时,它不会修改项目文件。它只将文件下载到包目录。只有NuGet.exe更新才会修改项目文件。NuGet restore同样只将NuGet包下载到包目录,而不修改项目ect文件。我假设您的问题是关于Visual Studio集成的。
    
    <config>
      <add key="repositorypath" value="\\localhost\d$\NuGet\packages" />
    </config>