有谁知道一种使Visual Studio按解决方案而不是跨所有解决方案应用NuGet包源配置的方法吗?我一直遇到版本控制问题,因为我在多个项目中工作,每个项目都有自己的私有NuGet存储库。在***中,很难记住哪个NuGet存储库属于哪个项目,然后回去将正确的项目应用于正确的项目。
有谁知道一种使Visual Studio按解决方案而不是跨所有解决方案应用NuGet包源配置的方法吗?我一直遇到版本控制问题,因为我在多个项目中工作,每个项目都有自己的私有NuGet存储库。在***中,很难记住哪个NuGet存储库属于哪个项目,然后回去将正确的项目应用于正确的项目。
Answers:
TLDR:是的
NuGet使用包源的分层应用程序,从Windows用户配置文件级别的NuGet.config开始,然后从包含解决方案的文件路径的根开始应用越来越细的配置,最后以包含您的解决方案的目录结束解决方案文件。
因此,这就是我设法弄清楚的内容-感谢一个有用的Twitterer,向我指出了此文档:
https://docs.nuget.org/consume/nuget-config-file
当您在Visual Studio的Tools > NuGet Package Manager > Package Manager Settings: Package Sources
选项中编辑NuGet程序包源时,默认情况下,它将那些更改应用于%APPDATA%\NuGet
目录中的NuGet.config文件。要在每个解决方案(或每个解决方案组)的基础上覆盖这些设置,您需要在解决方案路径中的某个位置添加策略性放置的NuGet.config文件。
如果您阅读了NuGet文档,一切将变得很清楚,我在下面提供的解决方案将使您可以快速为单个Visual Studio解决方案指定配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
<packageSources>
<!-- Ditch all the Global NuGet package sources we only want a
single private NuGet repo for this project -->
<clear />
<!-- Add the private NuGet package source for this solution -->
<add key="My Private NuGet Server" value="http://myprivatenuget.com:8080/nuget" />
</packageSources>
<disabledPackageSources>
<!-- Add any package sources to ignore here using the same keys as
defined in the packageSources list above-->
<!--<add key="nuget.org" value="true" />-->
<add key="Microsoft and .NET" value="true" />
</disabledPackageSources>
</configuration>
如果要将配置应用于多个解决方案,请确保所有解决方案文件夹都包含在一个公共目录中,并将与这些解决方案相关的软件包源的NuGet.config放在该公共目录中,确保没有“T使用这些包源不包含在该文件夹中常见。
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
我想补充一下BenAlabaster提供的出色答案。我有相反的问题:
该公司默认将其自定义私有nuget feed配置为可在所有解决方案上使用,并且我想使用public nuget feed制作“原型”应用。
使用此解决方案(在该解决方案的目录中),公共nuget提要仅可用于我的特定解决方案,而将公司提要保留为所有其他解决方案的默认提要:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
<clear />
<!-- Make sure we use the public nuget -->
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
<bindingRedirects>
<add key="skip" value="False" />
</bindingRedirects>
<disabledPackageSources>
<!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
<clear />
</disabledPackageSources>
</configuration>
关键是清除所有向上禁用的提要,因为它们故意在%APPDATA%\ NuGet的NuGet.config中禁用了公共提要。