有没有办法为每个解决方案制作NuGet Package Source设置?

时间:2015-11-20 16:37:48

标签: visual-studio nuget

有没有人知道如何让Visual Studio为每个解决方案而不是在所有解决方案中应用NuGet包源配置?我一直有版本问题因为我在多个项目上工作,每个项目都有自己的私有NuGet存储库。 ***记住NuGet repo属于哪个项目并返回并将正确的项目应用于正确的项目,这是一个痛苦的事。

2 个答案:

答案 0 :(得分:102)

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解决方案指定配置:

  1. 导航至%APPDATA%\ NuGet并获取NuGet.config
  2. 的副本
  3. 将副本转储到解决方案的根目录中 - 即Application.sln所在的位置。
  4. 通过编辑副本以仅包含与此解决方案相关的NuGet包源来覆盖应用于您的用户配置文件的默认值 - 例如,包含此解决方案的专有包的私有NuGet源,但不应该适用于其他项目 - 例如:
  5. <?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用于与该公共目录中的解决方案相关的包源,确保任何解决方案文件夹使用这些包源的项目不包含在此公共文件夹中。

答案 1 :(得分:3)

我想补充BenAlabaster提供的优秀答案。我有一个相反的问题:

默认情况下,公司在全球范围内配置了自定义私有nuget供稿,以便在所有解决方案中使用,我想制作一个&#34;原型&#34;使用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>

关键是清除所有向上禁用的Feed ,因为他们故意在%APPDATA%\ NuGet中的NuGet.config中禁用了公共Feed。