c# - 由于传递依赖,提供运行时标识符时,Dotnet 还原失败
问题描述
为什么提供运行时标识符时我的构建/恢复失败win-x64
?为什么我不这样做时它会起作用?我在尝试独立构建时偶然发现了这一点。
换句话说:为什么会有不同dotnet restore --runtime win-x64
的dotnet restore
依赖图?
当我netcoreapp2.1
用作目标框架时它可以工作,但它与netcoreapp3.1
or中断net5.0
。当我删除任何一个直接依赖项时,它也可以工作。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.23" />
<PackageReference Include="Serilog.Sinks.RollingFileAlternate" Version="2.0.9" />
</ItemGroup>
</Project>
> dotnet restore
Determining projects to restore...
Restored ...\ConsoleApp1\ConsoleApp1.csproj (in 289 ms).
> dotnet restore --runtime win-x64
Determining projects to restore...
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Runtime.InteropServices from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> Microsoft.Win32.Primitives 4.0.1 -> runtime.win.Microsoft.Win32.Primitives 4.3.0 -> System.Runtime.InteropServices (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.InteropServices (>= 4.1.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.IO.FileSystem.Primitives from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Console 4.0.0 -> runtime.win.System.Console 4.3.0 -> System.IO.FileSystem.Primitives (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem.Primitives (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Runtime.InteropServices from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Console 4.0.0 -> runtime.win.System.Console 4.3.0 -> System.Runtime.InteropServices (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.InteropServices (>= 4.1.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Text.Encoding.Extensions from 4.3.0 to 4.0.11. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Console 4.0.0 -> runtime.win.System.Console 4.3.0 -> System.Text.Encoding.Extensions (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Text.Encoding.Extensions (>= 4.0.11) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.IO.FileSystem.Primitives from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.IO.FileSystem.Primitives (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem.Primitives (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Runtime.Handles from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Runtime.Handles (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.Handles (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Runtime.InteropServices from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Runtime.InteropServices (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.InteropServices (>= 4.1.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Text.Encoding.Extensions from 4.3.0 to 4.0.11. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Text.Encoding.Extensions (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Text.Encoding.Extensions (>= 4.0.11) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: Microsoft.Win32.Primitives from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Primitives 4.0.11 -> runtime.win.System.Net.Primitives 4.3.0 -> Microsoft.Win32.Primitives (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> Microsoft.Win32.Primitives (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Diagnostics.Tracing from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Primitives 4.0.11 -> runtime.win.System.Net.Primitives 4.3.0 -> System.Diagnostics.Tracing (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Diagnostics.Tracing (>= 4.1.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Runtime.Handles from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Primitives 4.0.11 -> runtime.win.System.Net.Primitives 4.3.0 -> System.Runtime.Handles (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.Handles (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Runtime.InteropServices from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Primitives 4.0.11 -> runtime.win.System.Net.Primitives 4.3.0 -> System.Runtime.InteropServices (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.InteropServices (>= 4.1.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Diagnostics.Tracing from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.Diagnostics.Tracing (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Diagnostics.Tracing (>= 4.1.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.IO.FileSystem from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.IO.FileSystem (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.IO.FileSystem.Primitives from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.IO.FileSystem.Primitives (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem.Primitives (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Net.Primitives from 4.3.0 to 4.0.11. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.Net.Primitives (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Primitives (>= 4.0.11) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Runtime.Handles from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.Runtime.Handles (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.Handles (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Runtime.InteropServices from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.Runtime.InteropServices (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.InteropServices (>= 4.1.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: System.Diagnostics.Tracing from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Buffers 4.3.0 -> System.Diagnostics.Tracing (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Diagnostics.Tracing (>= 4.1.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: Detected package downgrade: Microsoft.Win32.Primitives from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version. [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.Security.Principal.Windows 4.3.0 -> Microsoft.Win32.Primitives (>= 4.3.0) [...\ConsoleApp1\ConsoleApp1.sln]
...\ConsoleApp1\ConsoleApp1.csproj : error NU1605: ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> Microsoft.Win32.Primitives (>= 4.0.1) [...\ConsoleApp1\ConsoleApp1.sln]
Failed to restore ...\ConsoleApp1\ConsoleApp1.csproj (in 406 ms).
我知道我可以通过添加这些依赖项来“修复”它,但我更喜欢更好的解决方案。
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" />
<PackageReference Include="System.Net.Primitives" Version="4.3.1" />
<PackageReference Include="System.IO.FileSystem.Primitives" Version="4.3.0" />
<PackageReference Include="System.IO.FileSystem" Version="4.3.0" />
解决方案
First, a nit on terminology. netcoreapp2.1
, netcoreapp3.1
and net5.0
are generally called Target Frameworks (and more formally Target Framework Monikers, often abbreviated to TFM). Runtime Identifers (often abbreviated to RID) identify a platform that .NET (Core) is running on top of. They include linux-x64
(Linux on x86_64), win-arm64
(Windows on Arm64) and so on.
A Target Framework identifies the Framework that your application is targeting. A Target Framework includes a number of assemblies (such as System.Collections.Generic
, or System.Runtime.InteropServices
) that it contains. All those assemblies are at specific versions.
Serilog.Sinks.RollingFileAlternate
, as an assembly, also depends on other assemblies. You can see such a few such dependency chains in your output:
ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> Microsoft.Win32.Primitives 4.0.1 -> runtime.win.Microsoft.Win32.Primitives 4.3.0 -> System.Runtime.InteropServices (>= 4.3.0)
ConsoleApp1 -> Serilog.Sinks.RollingFileAlternate 2.0.9 -> NETStandard.Library 1.6.0 -> System.Runtime.InteropServices (>= 4.1.0)
Looking at the second line first, it says Serilog depends on the NETStandard.Library 1.6.0 (equivalent to netstandard1.6
TFM), which depends on a particular version of System.Runtime.InteropServices
, 4.1.0.
The first line says that Serilog depends on Microsoft.Win32.Primitives
, which depends on the runtime package runtime.win.Microsoft.Win32.Primitives
. As I understand it, these runtime.*
packages are provided by your .NET SDK/Runtime installation. So using this leads to a dependency on a newer version of System.Runtime.InteropServices
.
Because two different dependency chains lead to two different versions of `System.Runtime.InteropServices being required, this gets flagged as a downgrade.
If you use netcoreapp2.1
(.NET Core 2.1), that has the runtime.win.Microsoft.Win32.Primitives
package at the lower (and matching) version (4.1.0). In that case, all dependency chains would lead to the same version, and there's no package downgrade identified.
推荐阅读
- sql-server - 多维数据集不连接
- javascript - 从数据库导出时如何修复我的日期值更改
- c++ - 加载 c++ dll 文件时如何修复 EXCEPTION_ACCESS_VIOLATION?
- ssis - 如何使数据流任务中的脚本组件失败?
- python - Python 日历 - 没有星期一
- r - 在处理 1922550 行和 17 列的数据帧时,vcovHC 未能按时间聚集
- sql - 当数据出现在某一行中时,如何选择所有行?
- css - 使用单独的子类覆盖设置为 parentClass>div{} 的子 div 属性
- tensorflow.js - 使用来自 node.js 上签名 URL 的 tensorflow loadGraphModel 的问题
- node.js - Passport js反序列化黑名单错误