.Net Core 相比 .Net Framework 的优势
.Net Framework 的缺点
- .Net Framework 是 系统级别安装的库,属于 Windows 下的通用公共库(各个程序不能设置单独的版本,升级会影响其他)
- .Net Framework 开发的程序不能独立部署(目标机器必须安装对应版本)
- Asp.Net 和 IIS 紧密耦合,且资源消耗大
- 不是云原生的平台
.Net Core 的优点
- 支持独立部署,不互相影响
- 彻底模块化,可以按需求安装需要的模块
- 不依赖于IIS,跨平台
- 运行效率高(没有历史包袱)
- 符合现代开发理念:依赖注入、单元测试等
.Net Standard
.Net Standard 是 .Net 平台下的一个共同的标准(.Net Framework、.Net Core、Xamarin等都遵从的标准),不是实现。
验证
新建 Net Standard2.0 的类库项目:
public class Class1
{
public static void Test()
{
Console.WriteLine(typeof(FileStream).Assembly.Location);
}
}
FileStream
转到定义,把顶部程序集路径(C:\Users\****\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll)在ILSpy中打开,可以看到反编译结果顶部有一段警告:此程序集被标记为“引用程序集”,这意味着它 只包含元数据,没有可执行代码 。
同样可以看到定义的属性以及方法都只包含空的实现:
新建两种控制台项目:
分别打印程序集路径:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll (.Net Framework 4.6.1)
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.3\System.Private.CoreLib.dll (.Net 6.0)
可以看到.Net Framework、.Net Core、.Net Standard 三者的程序集路径截然不同,进一步反编译则可以看到:
- .Net Standard 是引用程序集,不包含实现
- .Net Framework 和 .Net Core包含具体的实现,代码不完全一致
.Net Standard 只是规范,一个 .Net Standard 类库可以被支持其版本的 .Net Framework、.Net Core、Xamarin等引用,.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 Core | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 |
.Net Framework | 4.5 | 4.5 | 4.5.1 | 4.6 | 4.6.1 | 4.6.1 | 4.6.1 | 4.6.1 | - |