对于我的大多数项目,我有以下约定:

/src
    /Solution.sln
    /SolutionFolder
        /Project1
        /Project2
        /etc..
/lib
    /Moq
        moq.dll
        license.txt
    /Yui-Compressor
        yui.compressor.dll
/tools
    /ILMerge
        ilmerge.exe

您会注意到,我没有在源文件夹中保留外部库。我对使用NuGet也很感兴趣,但不希望在源文件夹内使用这些外部库。NuGet是否有一个设置来改变所有包加载到的目录?


当前回答

最一致的方法是使用nuget config显式设置配置:

nuget config -set repositoryPath=c:\packages -configfile c:\my.config

https://learn.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changing-config-settings

其他回答

2.1版本说明中提出的解决方案不能开箱即用。他们忘了提到代码:

internal string ResolveInstallPath()
{
    if (!string.IsNullOrEmpty(this.OutputDirectory))
    {
        return this.OutputDirectory;
    }
    ISettings settings = this._configSettings;

    ...
}

这阻碍了它的工作。要解决这个问题,你需要修改你的NuGet。然后删除“OutputDirectory”参数:

    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch)</RestoreCommand>

所以现在,如果你在NuGet中添加'repositoryPath'配置。Config(参见发布说明中关于放置配置文件的有效位置的描述),它将把所有包恢复到单个位置,但是…您的.csproj仍然包含以相对路径编写的程序集提示…

我仍然不明白为什么他们走了艰难的道路,而不是改变PackageManager,这样它就会添加相对于PackagesDir的提示路径。这就是我手动在本地(在我的桌面上)和构建代理上拥有不同包位置的方法。

<Reference Include="Autofac.Configuration, Version=2.6.3.862, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>$(PackagesDir)\Autofac.2.6.3.862\lib\NET40\Autofac.Configuration.dll</HintPath>
</Reference>

在已接受的答案中的配置文件在VS2012中为我工作。 然而,对我来说,只有当我做到以下几点时,它才会起作用:

在VS中创建一个新项目。 退出VS -这似乎很重要。 将配置文件复制到项目文件夹。 重新启动VS并添加包。

如果我遵循这些步骤,我就可以使用共享包文件夹。

除了Shane Kms的答案,如果你已经激活Nuget包还原,你编辑Nuget。在.nuget文件夹中的配置如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <repositoryPath>..\..\ExtLibs\Packages</repositoryPath>
</configuration>

注意多余的“..”“\”,因为它从.nuget文件夹而不是解决方案文件夹返回。

现在可以控制将包安装到哪个文件夹。

http://nuget.codeplex.com/workitem/215

编辑: 请看Phil Haack在2010年12月10日晚上11:45的评论(在工作项/上面的链接中)。该支持在1.0中部分实现,但没有文档记录。

@dfowler表示: 加一块鸡块。配置文件旁边的解决方案与此:

<settings>
<repositoryPath>{some path here}</repositoryPath>
</settings>

有一个用于创建包文件夹覆盖的nuget包。

版本2.1的更新

正如阿扎特所评论的,现在有关于如何控制包裹位置的官方文件。2.1版本的发布说明在一个nuget中指定了以下配置。配置文件(关于放置配置文件的有效位置以及分层配置模型如何工作的描述,请参阅发布说明):

<configuration>
  <config>
    <add key="repositoryPath" value="C:\thePathToMyPackagesFolder" />
  </config>
  ... 
</configuration>

这将更改您放入文件的配置级别的packages文件夹(解决方案,如果您将其放在解决方案目录中,项目在项目目录中等等)。注意,发布说明声明:

[…如果您的解决方案下面有一个现有的packages文件夹 在NuGet放置包之前,你需要删除它 新地点。

创建nuget。在解决方案文件所在目录下配置,包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="packages" />
  </config>
</configuration>

'packages'将是还原所有包的文件夹。

关闭Visual studio解决方案并重新打开。