NuGet无法找到一个包的版本。

46

运行该命令

nuget.exe restore .\MySolution.sln

出现以下错误:

无法找到软件包'Microsoft.Net.Compilers'的版本'1.0.0'。

这个软件包先前已被安装和还原,但某种原因导致它已经损坏。

12个回答

63

事实证明,只需通过 NuGet 版本更新

nuget.exe update -self

从2.8.0升级到3.4.4就足够了,现在软件包已经能够正确恢复了。


在我的情况下,更新到5.6.0有所帮助。 - Markus
这可能有效,因为更新NuGet显然会清除本地包的缓存,但在我看来这似乎有些过度,并且由于没有可用的更新,它可能并不总是有效。 - Baksteen
我不得不从https://www.nuget.org/downloads手动下载了一个更新版本,因为当我尝试使用update -self命令时,3.3.0版本出现了错误;然后它开始正常工作了。可能是因为旧版本不再受支持。 - Trisped

34
我能够在 macOS 上解决这个问题,使用以下命令重置我的 NuGet 缓存/索引: macOS
dotnet nuget locals --clear all

后来我成功地恢复了我的软件包:

dotnet restore

1
在Ubuntu上也非常好用(使用dotnet core 3.1)。 - John Pavek

17

我也遇到了同样的问题,但由于无法升级我们的构建服务器上安装的.NET Framework版本(2.8是最后一个与.NET 4.0兼容的版本),因此我需要继续使用nuget.exe 2.8。

问题的原因是只将nuget.config指向v3 API。解决方案是添加v2 API。例如:

<configuration>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="nuget v2" value="https://www.nuget.org/api/v2" />
  </packageSources>
</configuration>

2
我曾经使用过自动化的Mac构建工具,就像你一样无法升级nuget,但这个方法解决了我的错误。谢谢! - JKennedy

10
使用dotnet cli时,根据dotnet restore文档,您可以使用dotnet restore命令,并带有一些选项,如-f--no-cache--ignore-failed-sources
dotnet restore -f --no-cache --ignore-failed-sources

使用这个命令时,.NET Core不会在缓存的软件包中搜索。

7
因为我最近多次遇到这个问题,所以这是我的解决方案:
  1. 进入 C:\Users\<User>\AppData\Roaming\NuGet\
  2. 打开 NuGet.config
  3. <packageSources> 中添加 <add key="keyName" value="path to repository">。在我的情况下,它是指向 \\JENKINS\nuGet Repository 的网络文件夹。
因此,它应该看起来类似于这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageRestore>
        <add key="enabled" value="True" />
        <add key="automatic" value="True" />
    </packageRestore>
    <packageSources>
        <add key="local" value="\\JENKINS\nuGet Repository" />
        <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    </packageSources>
    <disabledPackageSources />
    <activePackageSource>
        <add key="All" value="(Aggregate source)" />
    </activePackageSource>
</configuration>

2
我曾经遇到同样的问题,但你们所有的答案都没有帮助到我。
后来我发现我的电脑时钟延迟了(那天我换了电脑),而我没有意识到这一点。
这个简单的纠正让一切都正常工作了。软件包版本确实存在,但因为它被认为是“未来”的版本,NuGet会给出找不到x.x.x版本的错误提示。
我认为这是一个巨大的错误,因为它不关心软件包的发布时间。如果你有一个版本列表,它被发布的日期并不重要。

我同意他们应该包含一些与错误条件相关的信息。问题不在于该版本下不存在该软件包,而是它已经过时了! - Taersious

2
清除Nuget缓存对我很有效。
从Visual Studio中执行此操作,只需打开“工具->选项->Nuget程序包管理器->常规”,然后单击“清除所有Nuget缓存”按钮。

2
在我的情况下,我已经将NuGet升级到最新版本,但仍然出现错误。
然后我发现,在解决方案根目录 → 'packages'文件夹中,有一个repositories.config文件,打开该文件,您会看到所有正在使用的packages.config:
<repository path="..\Common\Luna.Common\packages.config" />
<repository path="..\Common\Luna.ComponentBehaviors\packages.config" />
<repository path="..\Common\Luna.Data\packages.config" />
<repository path="..\Common\Luna.WPF.ApplicationFramework\packages.config" />
<repository path="..\GuyWire\Luna.Basic.GuyWire\packages.config" />

它正在存储信息1.0.0:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Iesi.Collections" version="3.1.0.4000" targetFramework="net40" />
  <package id="log4net" version="2.0.3" targetFramework="net40" />
  <package id="NHibernate" version="1.0.0" targetFramework="net40" />
  <package id="uNhAddIns" version="1.0.0" targetFramework="net40" />
</packages>

实际上我是按文件引用DLL文件,所以不需要通过NuGet获取。我删除了packages.config文件,然后错误就解决了。


1
在我们的情况下,我们将Visual Studio中的NuGet扩展从3.3.x升级到3.4.4版本。
您可以在菜单“工具”→“扩展和更新”→“更新”→“Visual Studio Gallery”中找到此更新。

1
我的问题是我将“包源”设置为了自己特定的NuGet服务器,而不是全部。

"All" 是字面值还是不是? - Peter Mortensen
是的,确实如此。 - arush436

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