Word文档地址:https://github.com/IceEmblem/LearningDocuments/tree/master/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/Windows%20%E5%B9%B3%E5%8F%B0/Net
本篇文章带你了解目标框架,项目,包之间的关系
.NET 的框架体系
下表列表了常见的 .net的框架
名称 TFM(目标框架)/TxM
.NET framework net11
net20
...(一系列的版本)
net472
net48
Windows Phone (SL) wp [wp7]
...(一系列的版本)
wp81
.NET Standard netstandard1.0
netstandard1.1
...(一系列的版本)
netstandard2.0
netstandard2.1
.NET netcoreapp1.0
netcoreapp1.1
...(一系列的版本)
netcoreapp3.1
net5.0
net6.0
1…NET Standard
.NET Standard 为规范框架,基于该框架的项目(包)可以被其他框架项目(包)使用,如项目A的框架为net6.0,包B的框架为netstandard2.1,则项目A可以引用包B
2.版本兼容性
高版本项目(包)可以引用低版本项目(包),如项目A的框架为net6.0,包B的框架为netcoreapp2.0,则A可以引用B,反之则不行
3.NET framework的兼容
从 .NET Standard 2.0 开始,引入了 .NET Framework 兼容性模式。 此兼容性模式允许 .NET Standard 和 .NET Core 项目引用 .NET Framework 库。但本人不推荐这种做法
.NET Standard与其他框架的关系
.NET Standard 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 2.0 | 2.1
.NET 和.NET Core 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0
.NET Framework 1 4.5 | 4.5 | 4.5.1 | 4.6 | 4.6.1 | 4.6.1 2 | 4.6.1 2 | 4.6.1 2 | N/A3
举个例子,如果项目(包)B的目标框架为 .NET Standard 2.0,那么要想引用B,那么当前项目的目标框架必须大于或等于 .net core 2.0或 .NET Framework 4.6.1
Nuget包与框架
每个包都有其支持的目标框架
如下,Amazon.Lambda.Serialization.SystemTextJson包支持的目标框架有 .netcoreapp3.1 和 net6.0

如果我们项目的目标框架是netcoreapp2.1,那么我们无法安装该包


如果我们将项目的目标框架改为netcoreapp3.1,则可以正常安装

Nuget包依赖项分析
我们以Microsoft.Extensions.DependencyInjection包的依赖项进行分析
我们以下面几个项目进行分析

1.项目目标框架 .NET Framework 4.5
如果我们的项目是 .NET Framework 4.5,对应的 .NET Standard 为1.0

依赖项分析:
-包依赖项 .NET Framework 4.6.1,该选项大于项目的目标框架,不适合
-包依赖项 .NET Standard 2.0,该选项大于项目的 .NET Standard 1.0,不适合
-…(其他选项不说了)
所以项目无法安装该包
2.项目目标框架 .netcoreapp2.1
如果我们的项目是 .netcoreapp2.1,对应的 .NET Standard 为2.0
依赖项分析:
-包依赖项 .net6.0,该选项不适合
-包依赖项 .NET Standard 2.1,该选项不适合
-包依赖项 .NET Standard 2.0,该选项适合
所以项目会安装该包,并且安装该包在该框架下所依赖的4个包

3.项目目标框架 net5.0
如果我们的项目是 net5.0,对应的 .NET Standard 为2.1
依赖项分析:
-包依赖项 .net6.0,该选项不适合
-包依赖项 .NET Standard 2.1,该选项适合
-所以项目会安装该包,并且安装该包在该框架下所依赖的2个包

包版本冲突
如下,我们在 .netcoreapp2.1 下安装了包Microsoft.Extensions.DependencyInjection

现在我们安装System.Threading.Tasks.Extensions 4.0 版本,会收到错误提示

意思就是下面这2个依赖包有冲突
TestConsoleApp1 -> Microsoft.Extensions.DependencyInjection 6.0.0 -> System.Threading.Tasks.Extensions (>= 4.5.4)
TestConsoleApp1 -> System.Threading.Tasks.Extensions (>= 4.0.0)
350



被折叠的 条评论
为什么被折叠?



