使用Nuget自动打包还原,自定义包源以及重复的包名称/版本

时间:2016-04-12 19:26:45

标签: .net visual-studio-2013 visual-studio-2015 nuget

我们试图将所有依赖项的提取移动到Nuget中。我们使用自己的自定义包源,以及默认的nuget.org源。我们的自定义软件包碰巧与nuget.org上存在的软件包名称/版本相同。

因此,在VS2013和VS2015中,我已经更新了包管理器设置以获得两个包源(自定义然后是nuget.org)并启用了nuget 2.7+自动包恢复。我还在包含包源的解决方案的根目录中添加了一个nuget.config文件:

<!-- nuget.config -->
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositorypath" value="c:\nuget\packages" />
  </config>
  <packagesources>
    <add key="customsource" value="http://custom.url/nuget" />
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packagesources>
</configuration>

我遇到了一种情况,当我在我的盒子上重建VS2013中的解决方案时,它会从自定义源中删除所有包含重复名称/版本的软件包。但是,如果我们在另一个人的机器上重建解决方案,它似乎会忽略自定义源并尝试从nuget.org获取所有内容,无论其设备上的设置是否相同。

当我尝试在VS2015中重建解决方案时,似乎忽略了自定义源并从nuget.org中提取了任何具有重复名称/版本的软件包。

如果我在命令行上使用nuget.exe 2.8.2,一切都按预期工作,只要我将自定义源保留在列表中的第一个,就可以将包拉出来。如果我在命令行上使用nuget.exe 3.3.0,我必须在源列表中将自定义源作为最后一个从我的自定义源中提取我的重复包。如果自定义源是列表中的第一个,则nuget 3.3.0只会从nuget.org恢复所有重复的包。

在我的测试中,我在尝试任何恢复之前清除了所有nuget缓存。

有没有人遇到过这个问题,如果有的话,你是怎么解决这个问题的?

2 个答案:

答案 0 :(得分:1)

在短期内,尝试打开包管理器控制台,选择适当的包源,然后恢复包。

Package Manager Console Snapshot

从长远来看,尝试使用某种限定符为内部Feed中的包添加前缀。例如,代替obj1Selector.selector,执行package。这应该可以解决您的包命名问题。

通常一个好主意的另一件事是将您的包签入源代码管理。这样,任何获得最新版本的开发人员都可以尽可能少地配置以构建代码。有关此理念的更多信息,请参见many blog posts。基本上,模型是,如果您需要它来构建代码,那么检查。然后,您只需要担心从正确的订阅源更新包,而不是依赖每个开发人员知道从哪个订阅源下载项目。

答案 1 :(得分:0)

好吧,我似乎已经解决了这个问题。首先,我将位于解决方案根目录中的nuget.config文件修改为以下内容:

<!-- nuget.config -->
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositorypath" value="c:\nuget\packages" />
  </config>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <packagesources>
    <add key="customsource" value="http://custom.url/nuget" />
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packagesources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>

接下来,我在C:\ Users \ ExitusLSU \ AppData \ Roaming \ Nuget下找到另一个nuget.config,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <packagesources>
    <add key="customsource" value="http://custom.url/nuget" />
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packagesources>
  <activePackageSource>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </activePackageSource>
</configuration>

在启动nuget包还原时,Visual Studio似乎正在读取此文件并忽略解决方案中的nuget.config文件。我注意到每当我尝试在Visual Studio中重新排序包源时,源命令永远不会在解决方案nuget.config文件中更新。我删除了&#34;漫游&#34; nuget.config文件并重新启动Visual Studio。漫游&#34;漫游&#34; nuget.config已重新创建,但文件中基本上没有任何内容。现在,解决方案nuget.config正在正确更新,我的包源正在被正确读取。

感谢所有人花时间回答我的问题并提供一些帮助!