.net 是否可以更改NuGet包的位置?
我的大多数项目都有以下约定:.net 是否可以更改NuGet包的位置?,.net,visual-studio,nuget,nuget-package,.net,Visual Studio,Nuget,Nuget Package,我的大多数项目都有以下约定: /src /Solution.sln /SolutionFolder /Project1 /Project2 /etc.. /lib /Moq moq.dll license.txt /Yui-Compressor yui.compressor.dll /tools /ILMerge ilmerge.exe 您会注
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
您会注意到,我没有将外部库保存在源文件夹中。我对使用NuGet也很感兴趣,但不希望这些外部库位于源文件夹中。NuGet是否有更改所有软件包加载到的目录的设置?现在可以控制软件包安装到哪个文件夹中 编辑: 参见Phil Haack于2010年12月10日晚上11:45发表的评论(在上面的工作项/链接中)。该支持在1.0中部分实现,但没有文档记录 根据@dfowler的说法: 使用以下命令在解决方案旁边添加一个nuget.config文件:
<settings>
<repositoryPath>{some path here}</repositoryPath>
</settings>
{此处的某些路径}
没有用于创建包文件夹覆盖的方法
更新版本2.1
正如Azat所评论的,现在有关于如何控制包位置的官方文档。在nuget.config文件中指定以下配置(有关放置配置文件的有效位置以及分层配置模型的工作方式的说明,请参阅发行说明):
...
这将更改您将文件放入的配置级别的packages文件夹(如果将其放入解决方案目录,则为解决方案,项目放入项目目录,等等)。请注意,发行说明中说明:
[…]如果您的解决方案下有一个现有的packages文件夹
root,您需要在NuGet将包放入之前将其删除
新地点
<configuration>
<config>
<add key="repositoryPath" value="..\ExtLibs\Packages" />
</config>
...
</configuration>
...
这确实对我有用:
<?xml version="1.0" encoding="utf-8"?>
<settings>
<repositoryPath>..\ExtLibs\Packages</repositoryPath>
</settings>
..\ExtLibs\Packages
2.1发行说明中提出的解决方案不是现成的。他们忘了提到有代码:
internal string ResolveInstallPath()
{
if (!string.IsNullOrEmpty(this.OutputDirectory))
{
return this.OutputDirectory;
}
ISettings settings = this._configSettings;
...
}
这使它无法工作。要解决此问题,您需要修改NuGet.targets文件并删除“OutputDirectory”参数:
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch)</RestoreCommand>
$(NuGetCommand)安装“$(PackageConfig)”-源“$(PackageSources)”$(RequiredSentSwitch)
因此,现在,如果您在NuGet.config中的某个位置添加'repositoryPath'配置(有关放置配置文件的有效位置的说明,请参阅发行说明),它会将所有包还原到单个位置,但是。。。您的.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>
真的
$(PackagesDir)\Autofac.2.6.3.862\lib\NET40\Autofac.Configuration.dll
接受答案中的配置文件在VS2012中对我有效。
但是,对我来说,只有当我执行以下操作时,才起作用:
如果我遵循这些步骤,我可以使用共享包文件夹。除了Shane Kms answer之外,如果您已激活Nuget package Restore,则可以按如下方式编辑位于.Nuget文件夹中的Nuget.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<repositoryPath>..\..\ExtLibs\Packages</repositoryPath>
</configuration>
..\..\ExtLibs\Packages
请注意额外的“.\”,因为它是从.nuget文件夹而不是解决方案文件夹返回的。好的,为了阅读本文的其他人——以下是我对上面无数答案的理解:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<config>
<add key="repositoryPath" value="..\..\Packages" />
</config>
...
</configuration>
<HintPath>N:\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
...
...
只是更新了Nuget 2.8.3。要更改已安装软件包的位置,我启用了右键单击解决方案的软件包还原。编辑了NuGet.Config并添加了以下行:
<config>
<add key="repositorypath" value="..\Core\Packages" />
</config>
然后重新构建解决方案,它将所有包下载到我想要的文件夹,并自动更新引用 Visual Studio 2015上Nuget 3.2的解决方案是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="../lib" />
</config>
</configuration>
VS 2017的更新:
Nuget团队的人终于开始使用Nuget,这帮助他们找到并修复了一些重要的事情。因此,现在(如果我没有弄错的话,因为仍然没有迁移到VS2017)不再需要下面的内容。您应该能够将“repositoryPath”设置为本地文件夹,它将正常工作。甚至您也可以将其保留为默认还原位置,将其从解决方案文件夹移动到计算机级别。再一次-我仍然没有自己测试它
与2015年及之前相比
以下是其他答案的提示(特别是):
可以通过配置更改NuGet软件包文件夹的位置,但VisualStudio仍然引用此文件夹中的程序集:
<HintPath>..\..\..\..\..\..\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
现在,在添加新的NuGet包时,项目引用使用其绝对位置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<config>
<add key="repositoryPath" value="..\..\Packages" />
</config>
...
</configuration>
<HintPath>N:\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
N:\SomeAssembly\lib\net45\SomeAssembly.dll
注:
重新启动后,这样的虚拟驱动器将被删除,因此请确保
不要忘记替换项目文件中的现有引用
都不是
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
<config>
<add key="repositorypath" value="$/../../../Common/packages" />
</config>
</configuration>
NuGet.exe config -Set repositoryPath=$/../../../Common/packages -ConfigFile NuGet.Config
<configuration>
<config>
<add key="globalPackagesFolder" value="lib" />
</config>
...
</configuration>
nuget config -set repositoryPath=c:\packages -configfile c:\my.config
<config>
<add key="globalPackagesFolder" value="c:\packageReferences" />
<add key="repositoryPath" value="c:\packagesConfig" />
</config>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="packages" />
</config>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
</packageSources>
<config>
<add key="globalPackagesFolder" value="E:\.packages" />
<add key="repositoryPath" value="E:\.nuget" />
</config>
</configuration>