【问题标题】:Detected package downgrade: Microsoft.NETCore.App from 2.1.3 to 2.1.0检测到的包降级:Microsoft.NETCore.App 从 2.1.3 到 2.1.0
【发布时间】:2018-08-28 19:37:05
【问题描述】:

我尝试将我的 .NET 解决方案从 .NET Core 1.1 更新到 .NET Core 2.1。我有几个 .NET Core 和 .NET 标准项目,它们相互引用并引用另一个 NuGet 包。更新 'dotnet resore' 和 'dotnet build' 命令后工作正常,但是当我尝试从 Visual Studio 构建我的解决方案时,我收到此错误:

错误 NU1605 检测到包降级:Microsoft.NETCore.App 从 2.1.3 到 2.1.0。直接从项目中引用包以选择不同的版本。

我发现我的一些项目确实有对 Microsoft.NETCore.App v2.1.0 的 SDK 引用,其中一些是 v.2.1.3。设置 RuntimeFrameworkVersion 并将此包显式添加到依赖项中不起作用。

我该如何处理?

统一更新: dotnet --info:

.NET Core SDK (reflecting any global.json):  Version:   2.1.401  Commit:    91b1c13032

Runtime Environment:  OS Name:     Windows  OS Version:  10.0.17134  OS Platform: Windows  RID:         win10-x64  Base Path:   C:\Program Files\dotnet\sdk\2.1.401\

Host (useful for support):   Version: 2.1.3   Commit:  124038c13e

.NET Core SDKs installed:
  1.1.10 [C:\Program Files\dotnet\sdk]
  2.0.0 [C:\Program Files\dotnet\sdk]
  2.1.4 [C:\Program Files\dotnet\sdk]
  2.1.100 [C:\Program Files\dotnet\sdk]
  2.1.202 [C:\Program Files\dotnet\sdk]
  2.1.400 [C:\Program Files\dotnet\sdk]
  2.1.401 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:   Microsoft.AspNetCore.All 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]   Microsoft.AspNetCore.All 2.1.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]   Microsoft.AspNetCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]   Microsoft.AspNetCore.App 2.1.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]   Microsoft.NETCore.App
1.0.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]   Microsoft.NETCore.App 1.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]   Microsoft.NETCore.App
2.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]   Microsoft.NETCore.App 2.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]   Microsoft.NETCore.App
2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]   Microsoft.NETCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]   Microsoft.NETCore.App
2.1.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:   https://aka.ms/dotnet-download

统一更新: 如果我从 .csproj 文件中删除此行,问题就会以某种方式消失:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

可以关联吗?

【问题讨论】:

  • 你能运行dotnet --info 并告诉我们结果吗?
  • 删除 RuntimeIdentifier 也对我有用。

标签: c# .net .net-core nuget


【解决方案1】:

我遇到了类似的问题。指定运行时标识符时无法发布我的项目。

我开始工作的解决方案是将以下行添加到 *.csproj

<PropertyGroup>     
    <TargetFramework> xxx </TargetFramework>     
    <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>  <<<----- Add this line  
</PropertyGroup>

添加该行后,项目将正确发布。

以下链接引用了 2.1.1 和 2.1.0 之间的降级问题,但解决方案效果相同。

https://github.com/dotnet/cli/issues/9624

【讨论】:

  • 出于某种原因,我只需要将其应用于测试项目。其他几乎相同的项目不需要这个。
  • 在文件中的什么位置添加?
  • @SteveSmith: &lt;PropertyGroup&gt; &lt;TargetFramework&gt; xxx &lt;/TargetFramework&gt; &lt;TargetLatestRuntimePatch&gt;true&lt;/TargetLatestRuntimePatch&gt; &lt;/PropertyGroup&gt;
  • 您需要根据第三条评论更新您的答案
  • 用最新版本升级我的 SDK 后。它有效。
【解决方案2】:

我的 csproj 文件中缺少一个版本。

添加版本解决了这个问题。

【讨论】:

  • 这将改变行为。这样你就不再需要前滚了,微软推荐的方法是拥有一个无版本的 Microsoft.AspNetCore.App 并将 SDK 放在顶部 &lt;Project Sdk="Microsoft.NET.Sdk.Web"&gt;
【解决方案3】:

我也有这个问题。最终为我解决的问题是从“程序”控制面板中卸载 .NET SDK 2.1.3。或者我基本上必须卸载我的项目尝试使用的相关 SDK 库的任何更高版本。

【讨论】:

    【解决方案4】:

    在我的 Windows 机器上将 .net core SDK 从 .net core 2.1.0 更新到 .net core 2.2.0 后,我遇到了同样的问题。我无法构建项目并在检测到的包降级时出现构建错误:Microsoft.AspNetCore.Razor.Design from 2.2.0 to 2.1.0。

    我已经通过更新 Microsoft.AspNetCore.Razor.Design 的 nuget 包解决了这个问题

    【讨论】:

    • 这为我解决了问题。奇怪的是 Microsoft.AspNetCore.App 已经升级到 2.2,但是 [...].Razor.Design 只剩下 2.1
    【解决方案5】:

    在添加对MySQL.Data 的引用后,我刚刚遇到了同样的问题。

    唯一的解决方案是在 .csproj 文件中明确定义受影响引用的版本:

    <PackageReference Include="System.Diagnostics.Debug" Version="4.3.0" />
    <PackageReference Include="System.Runtime.Extensions" Version="4.3.0" />
    <PackageReference Include="System.Globalization" Version="4.3.0" />
    <PackageReference Include="System.Threading" Version="4.3.0" />
    <PackageReference Include="System.Net.NameResolution" Version="4.3.0" />
    <PackageReference Include="System.IO.FileSystem" Version="4.3.0" />
    

    【讨论】:

      【解决方案6】:

      我的这个问题的版本(我认为)是由安装在 Jenkins 构建服务器上的实际 .NET Core 版本以及具有不明确引用的单元测试项目组合引起的。

      我了解,在理想情况下,dotnet 不希望 csproj 中为 AspNetCore 指定任何版本 - 在构建期间提供最大的灵活性:

      <PackageReference Include="Microsoft.AspNetCore.App" />
      

      但是,在构建服务器上编译主项目时(第一次),它选择使用 2.1.6 作为 AspNetCore 版本。然后它会尝试编译测试项目,并且该项目的最低版本为“2.1.1”,因此构建过程会尝试降级,然后将构建作为失败中止。

      我从测试项目中删除了“2.1.1”最低版本,但是测试项目不会在本地构建,因为它无法明确地解决依赖关系。经过多次 NuGet 包的升级/降级没有什么乐趣,所以选择强制一个“2.1.6”最低版本以便与构建服务器保持一致。

      这仍然无法在本地正确解析所有依赖项,最终以强制NetCore的最低版本结束:

      <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.6" />
      <PackageReference Include="Microsoft.NetCore.App" Version="2.1.6" />
      

      现在所有内容都在本地和 Jenkins 构建服务器上构建!

      【讨论】:

        【解决方案7】:

        安装新版本的 .Net Core(2.0 到 2.1)后,我也遇到了这个问题。下面的链接提示了导致问题的原因。

        https://github.com/dotnet/cli/issues/9433

        我的解决方案是将项目的 Target Framework 更改为最新安装的 .Net Core 版本。

        Project Properties > Application > Target Framework
        

        【讨论】:

          【解决方案8】:

          为未来的读者。

          一大早,我的代码正在构建中。

          然后我开始收到此错误:

          Error   NU1605  Detected package downgrade: Microsoft.Extensions.Logging from 3.1.1 to 2.1.1. Reference the package directly from the project to select a different version.
          

          我在 2 个组件上得到了它,csprojs。

          MyCompany.MyProject.SomeLibraryONE 
          MyCompany.MyProject.SomeLibraryTWO
          

          当然,我开始追踪“Microsoft.Extensions.Logging”。

          但后来我想起“它今天早上工作”,我回溯了我的更改。

          我发现了一个新的包(nuget import)添加进来

          MyCompany.MyProject.SomeLibraryTHREE
          

          (而 ONE 和 TWO 引用了 THREE)

          这是“新”行:

          <PackageReference Include="Microsoft.Extensions.Http" Version="3.1.1" />
          

          所以我看了又看,但这是导入“Microsoft.Extensions.Http”包的唯一地方。

          做什么?

          从记忆中,我只记得我有很多“3.1.0”包导入,但没有 3.1.1。

          其他包导入示例(例如):

          <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.0" />
          <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.0" />
          

          长话短说…………我更改了新的包导入(新导入是我的代码损坏的主要嫌疑人)……并将其更改为匹配“3.1.0 世界”。

          所以我现在有了这个。

          <PackageReference Include="Microsoft.Extensions.Http" Version="3.1.0" />
          

          现在一切正常。

          所以(实际的)错误可能是对实际发生的事情的一个转移注意力。

          希望您正在使用源代码管理,并且可以“反转”它。

          只是为了完成这个......这是奇怪的部分:

          \.nuget\packages\microsoft.extensions.http\3.1.1\lib\netcoreapp3.1\Microsoft.Extensions.Http.dll
          

          我打开了这个文件。

          它引用了

          // Microsoft.Extensions.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
              // Assembly reference loading information:
              // Info: Success - Loading from: C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\3.1.0\Microsoft.Extensions.Logging.dll
          

          不是,它是“3.1.0\Microsoft.Extensions.Logging.dll”。那么它破坏的东西是什么???? (谁知道?)

          所以虽然这对我来说没有意义............我上面展示的内容确实解决了这个问题。

          去看看。

          希望对某人有所帮助。

          【讨论】:

            【解决方案9】:

            我在 .NET 5 上,看起来这个错误仍然存​​在。

            问题:无法将 EntityFramework 包从 5.0.5 更新到 5.0.8。

            修复:

            1. 我发现的一个快速解决方法是从解决方案>参考>包中删除所选包(在我的情况下为 5.0.5 版)的所有包引用。右键单击并删除每个。

            2. 现在转到 nuget 包管理器并再次添加这些相同的包(现在版本将是 5.0.8)。

            3. 构建

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-12-01
              • 1970-01-01
              • 2018-01-22
              • 2018-10-21
              • 1970-01-01
              • 1970-01-01
              • 2021-03-12
              • 1970-01-01
              相关资源
              最近更新 更多