自动包还原: 找不到软件包的版本

22

我们正在使用改进的 自动包恢复 进程来恢复丢失的 NuGet 包。

在构建时,恢复对话框弹出并从软件包源下载,这是正确的:

Restore Dialog

我看到软件包正在恢复到packages文件夹中,但并未完成全部恢复。我收到以下类型的错误信息:
Error   10  NuGet Package restore failed for project MyProject: System.InvalidOperationException: Unable to find version '6.0.1' of package 'Newtonsoft.Json'.
   at NuGet.PackageHelper.ResolvePackage(IPackageRepository repository, String packageId, SemanticVersion version)
   at NuGet.VsEvents.PackageRestorer.RestorePackage(PackageReference package)
   at NuGet.VsEvents.PackageRestorer.RestorePackages(String packageReferenceFileFullPath, IFileSystem fileSystem)
   at NuGet.VsEvents.PackageRestorer.PackageRestore(ProjectPackageReferenceFile projectPackageReferenceFile).

这可能是因为我有多个软件包源吗?

enter image description here

NuGet可能会在我们的私有包源中搜索'Newtonsoft.Json',而不是在nuget.org源中。 .nuget/NuGet.config文件:
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="private" value="http://privatePackageSource.com/nuget" />
  </packageSources>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

我们正在使用Visual Studio 2013和NuGet 2.8.5。
编辑:
使用Fiddler,我确认NuGet确实在错误的源中搜索软件包。它正在从我的私有存储库请求以下软件包。
我还阅读了这篇文章并将activePackageSource部分添加到NuGet.config文件中:
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="private" value="http://privatePackageSource.com/nuget" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

但它并没有解决问题。

1
你的全局 NuGet.config 文件(C:\Users\UserName\AppData\Roaming\NuGet\NuGet.config)中有什么内容?如果在其中定义了私有包源但已禁用,则会覆盖解决方案的 NuGet.config。首先检查一下。如果是这样,你可以通过在解决方案的 NuGet.config 文件中使用 <clear /> 元素来覆盖全局 NuGet.config。 - Matt Ward
它也在那里定义了(我不明白怎么做?),但它没有被设置为禁用。 - Dave New
如果在加载解决方案NuGet.config时更改设置,则NuGet将把软件包源保存到全局NuGet.config中。如果从全局NuGet.config中删除它,那么私有软件包源是否可在“管理软件包”对话框中看到? - Matt Ward
@MattWard:全局 NuGet.config 确实是问题所在。它没有更新。创建一个答案,我会奖励它 - 谢谢。 - Dave New
3个回答

18

实际上,它已被全局 NuGet.config 文件(C:\Users\UserName\AppData\Roaming\NuGet\NuGet.config)覆盖。重新启动 Visual Studio 似乎可以清除它。


11

由于某些原因,我的NuGet.config文件中的nuget.org密钥已被禁用。我检查了NuGet包管理器的设置,一切都正确。重新启动了VS2013并且它可以工作了。下面是我现在使用的NuGet.config文件:

<?xml version="1.0" encoding="utf-8"?>
 <configuration>
  <solution>
   <add key="disableSourceControlIntegration" value="true" />
  </solution>
 <packageRestore>
  <add key="enabled" value="True" />
  <add key="automatic" value="True" />
 </packageRestore>
 <packageSources>
   <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
 </packageSources>
 <disabledPackageSources />
 <activePackageSource>
   <add key="Microsoft and .NET" value="https://www.nuget.org/api/v2/curated-feeds/microsoftdotnet/" />
 </activePackageSource>
</configuration>

1

我曾经遇到过相同的错误,在我的情况下,在构建之前运行nuget restore命令修复了它


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接