我尝试将.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>
可以关联吗?
答案 0 :(得分:25)
我和你有类似的问题。指定运行时标识符后,无法发布我的项目。
我要工作的解决方案是将以下行添加到* .csproj
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
添加该行之后,该项目将正确发布。
下面的链接引用了2.1.1和2.1.0之间的降级问题,但是解决方案的工作原理相同。
答案 1 :(得分:5)
答案 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。
修复:
我发现的一种快速解决方法是从“解决方案”>“参考”>“包”中删除所选包(在我的情况下为 5.0.5 版)的所有包引用。右键单击并删除每个。
现在转到 nuget 包管理器并再次添加这些相同的包(现在版本将是 5.0.8)。
构建
答案 8 :(得分:-1)
在安装新版本的.Net Core(2.0到2.1)之后,我也遇到了这个问题。下面的链接给了我提示导致问题的原因。
https://github.com/dotnet/cli/issues/9433
对我来说,解决方案是将项目的目标框架更改为最新安装的.Net Core版本。
Project Properties > Application > Target Framework