检测到的包降级:Microsoft.NETCore.App从2.1.3降到2.1.0

时间:2018-08-28 19:37:05

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

我尝试将.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并将此程序包显式添加到依赖项中是行不通的。

我该如何处理?

UPD: 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

UPD: 如果我从.csproj文件中删除此行,则问题以某种方式消失:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

可以关联吗?

9 个答案:

答案 0 :(得分:25)

我和你有类似的问题。指定运行时标识符后,无法发布我的项目。

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

<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>

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

下面的链接引用了2.1.1和2.1.0之间的降级问题,但是解决方案的工作原理相同。

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

答案 1 :(得分:5)

csproj文件中缺少版本。

添加版本解决了该问题。

enter image description here

答案 2 :(得分:2)

将Windows计算机上的.net core SDK从.net core 2.1.0更新到.net core 2.2.0之后,我遇到了同样的问题。我无法构建项目,并且由于检测到的软件包降级而导致构建错误:Microsoft.AspNetCore.Razor.Design从2.2.0降为2.1.0。

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

添加对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" />

答案 5 :(得分:0)

此问题的我版本(我认为)是由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构建服务器上构建!

答案 6 :(得分:0)

供将来的读者使用。

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

然后我开始出现此错误:

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导入)

MyCompany.MyProject.SomeLibraryTHREE

(并且一个和两个引用了三个)

这是“新”行:

<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”。那是什么破东西呢? (谁知道?)

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

去吧。

希望能帮助别人。

答案 7 :(得分:0)

我使用的是 .NET 5,看起来这个错误仍然存​​在。

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

修复:

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

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

  3. 构建

答案 8 :(得分:-1)

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

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

对我来说,解决方案是将项目的目标框架更改为最新安装的.Net Core版本。

Project Properties > Application > Target Framework