The*_*Sky 278 .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
Run Code Online (Sandbox Code Playgroud)
你会注意到,我没有保持外部库中的源文件夹.我也对使用NuGet非常感兴趣,但不希望在源文件夹中使用这些外部库.NuGet是否有设置来更改所有包加载到的目录?
PHe*_*erg 239
现在可以控制将软件包安装到哪个文件夹中.
http://nuget.codeplex.com/workitem/215
编辑: 请参阅Phil Haack对2010年12月10日晚上11:45的评论(在工作项目/上面的链接中).支持部分在1.0中实现,但没有记录.
根据@dfowler:在解决方案旁边添加一个nuget.config文件:
<settings>
<repositoryPath>{some path here}</repositoryPath>
</settings>
Run Code Online (Sandbox Code Playgroud)
版本2.1的更新
正如Azat评论的那样,现在有关于如何控制包装位置的官方文档.2.1的发行说明在nuget.config文件中指定了以下配置(有关放置配置文件的有效位置的说明以及分层配置模型的工作原理,请参阅发行说明):
<configuration>
<config>
<add key="repositoryPath" value="C:\thePathToMyPackagesFolder" />
</config>
...
</configuration>
Run Code Online (Sandbox Code Playgroud)
这将更改您放入文件的配置级别的packages文件夹(解决方案,如果您将其放在解决方案目录中,项目在项目目录中,等等).请注意,发行说明指出:
[...]如果解决方案根目录下有现有的packages文件夹,则需要在NuGet将包放入新位置之前将其删除.
Sha*_*eKm 61
这不适合我:
<configuration>
<config>
<add key="repositoryPath" value="..\ExtLibs\Packages" />
</config>
...
</configuration>
Run Code Online (Sandbox Code Playgroud)
这对我有用:
<?xml version="1.0" encoding="utf-8"?>
<settings>
<repositoryPath>..\ExtLibs\Packages</repositoryPath>
</settings>
Run Code Online (Sandbox Code Playgroud)
Rob*_*etz 36
好的,为了其他人阅读这篇文章 - 这就是我对上面无数答案的理解:
.nuget文件夹中的nuget.config文件是相对于该文件夹的.这很重要,因为如果您的新文件夹类似于"../Packages",它会将其放在开箱即用的位置.正如@ bruce14所说,你必须改为'../../Packages'
我无法获得最新的nuget(2.8.5)来查找标准位置之外的包文件夹而不启用包恢复.因此,一旦启用包还原,则应将以下内容添加到.nuget文件夹内的nuget.config文件中以更改位置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<config>
<add key="repositoryPath" value="..\..\Packages" />
</config>
...
</configuration>
Run Code Online (Sandbox Code Playgroud)(这很重要)如果对nuget.config文件中的包文件夹位置进行任何更改,则必须重新启动visual studio或关闭/重新加载解决方案才能使更改生效
phu*_*gnd 22
Visual Studio 2015上的Nuget 3.2解决方案是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="../lib" />
</config>
</configuration>
Run Code Online (Sandbox Code Playgroud)
使用正斜杠为父文件夹.在解决方案文件夹中保存上面的文件(nuget.config).
参考可在此处获得
Ser*_*cat 17
Visual Studio 2019和Nuget 5.9。*
Run Code Online (Sandbox Code Playgroud)<config> <add key="repositoryPath" value="D:\.nuget\packages" /> </config>
Dmi*_*mov 14
在2.1的发行说明中提出的解决方案并不是开箱即用的.他们忘了提到有代码:
internal string ResolveInstallPath()
{
if (!string.IsNullOrEmpty(this.OutputDirectory))
{
return this.OutputDirectory;
}
ISettings settings = this._configSettings;
...
}
Run Code Online (Sandbox Code Playgroud)
这阻止它工作.要解决此问题,您需要修改NuGet.targets文件并删除"OutputDirectory"参数:
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch)</RestoreCommand>
Run Code Online (Sandbox Code Playgroud)
所以现在,如果你在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>
Run Code Online (Sandbox Code Playgroud)
Man*_*nny 12
为了使用 PackageReference 而不是 packages.config 更改项目的路径,您需要使用 globalPackagesFolder
来自https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file
globalPackagesFolder(仅使用 PackageReference 的项目)
默认全局包文件夹的位置。默认为 %userprofile%.nuget\packages (Windows) 或 ~/.nuget/packages (Mac/Linux)。可以在特定于项目的 nuget.config 文件中使用相对路径。此设置由优先的 NUGET_PACKAGES 环境变量覆盖。
repositoryPath(仅packages.config)
安装 NuGet 包的位置,而不是默认的 $(Solutiondir)/packages 文件夹。可以在特定于项目的 nuget.config 文件中使用相对路径。此设置由优先的 NUGET_PACKAGES 环境变量覆盖。
<config>
<add key="globalPackagesFolder" value="c:\packageReferences" />
<add key="repositoryPath" value="c:\packagesConfig" />
</config>
Run Code Online (Sandbox Code Playgroud)
我将 Nuget.config 放在我的解决方案文件旁边并且它起作用了。
use*_*ser 10
除了Shane Kms的回答,如果您已激活Nuget Package Restore,则可以编辑位于.nuget-folder中的NuGet.config,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<repositoryPath>..\..\ExtLibs\Packages</repositoryPath>
</configuration>
Run Code Online (Sandbox Code Playgroud)
注意额外的".. \",因为它从.nuget文件夹而不是解决方案文件夹回溯.
这些答案都没有对我有用(Nuget 2.8.6)因为缺少一些提示,会尝试在这里添加它们,因为它可能对其他人有用.
阅读以下资料后:
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
看来
例如
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
<config>
<add key="repositorypath" value="$/../../../Common/packages" />
</config>
</configuration>
Run Code Online (Sandbox Code Playgroud)
您还可以使用NuGet命令确保语法正确如下:
NuGet.exe config -Set repositoryPath=$/../../../Common/packages -ConfigFile NuGet.Config
Run Code Online (Sandbox Code Playgroud)
对于.NET Core项目和Visual Studio 2017,我可以通过提供此配置将所有包还原到相对路径:
<configuration>
<config>
<add key="globalPackagesFolder" value="lib" />
</config>
...
</configuration>
Run Code Online (Sandbox Code Playgroud)
根据我的经验,lib文件夹是在找到Nuget.config的同一级别创建的,无论sln文件在哪里.我测试了,命令行dotnet还原和Visual Studio 2017重建的行为相同
小智 7
我刚刚发现的另一个小花絮。(这可能太基本了以至于有些人没有提到它,但它对我的解决方案很重要。)“packages”文件夹最终与您的 .sln 文件位于同一文件夹中。
我们移动了 .sln 文件,然后修复了其中的所有路径以找到各种项目,瞧!我们的包文件夹最终到达了我们想要的位置。
接受的答案中的配置文件适用于VS2012.但是,对我而言,只有在我执行以下操作时才有效:
如果我按照这些步骤操作,我可以使用共享包文件夹.
VS 2017 更新:
看起来 Nuget 团队的人们终于开始自己使用 Nuget,这帮助他们找到并修复了几个重要的事情。所以现在(如果我没记错的话,因为仍然没有迁移到 VS 2017)下面不再需要了。您应该能够将“repositoryPath”设置为本地文件夹,它会起作用。即使您完全可以保留它,因为默认情况下还原位置已从解决方案文件夹移出到机器级别。再次 - 我仍然没有自己测试
VS 2015 及更早版本
只是对其他答案的提示(特别是这个):
NuGet Package 文件夹的位置可以通过配置更改,但 VisualStudio 仍然相对引用此文件夹中的程序集:
<HintPath>..\..\..\..\..\..\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题(直到找到更好的解决方案),我使用subst命令创建了一个指向 Packages 文件夹新位置的虚拟驱动器:
subst N: C:\Development\NuGet\Packages
Run Code Online (Sandbox Code Playgroud)
现在,当添加新的 NuGet 包时,项目引用使用其绝对位置:
<HintPath>N:\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
Run Code Online (Sandbox Code Playgroud)
笔记:
最一致的方法是使用nuget config
显式设置配置:
nuget config -set repositoryPath=c:\packages -configfile c:\my.config
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
177542 次 |
最近记录: |