淡若轻风

博客园 首页 新随笔 联系 订阅 管理

.NET Framework 和 .NET Core(现在官方名称统一为 现代 .NET,例如 .NET 6/7/8/9)的选择,本质上是:

新项目优先选择现代 .NET;维护老系统、依赖 Windows 专有技术时选择 .NET Framework。

下面从实际开发角度(尤其结合你做 WPF、插件化、工业软件这类场景)对比。


1. 历史背景

 .NET Framework.NET Core / 现代 .NET
发布时间 2002 2016
当前状态 维护模式 主力发展方向
最新版本 4.8.1 .NET 8/9
开源 部分开源 完全开源
跨平台 ❌ Windows Only ✅ Windows/Linux/macOS
性能 较低 更高
发布方式 系统安装 可独立部署

简单理解:

image

 


2. 最大区别

2.1 运行平台

.NET Framework

只能:

image

这些都是 Framework 时代的重要组件。


.NET Core / .NET 8

支持:

Windows
Linux
macOS
Docker
ARM
Cloud

例如:

ASP.NET Core:

Linux服务器
      |
      |
   Kestrel
      |
  .NET 8 Web API

 


3. 性能比较

现代 .NET 优势明显。

Web API

例如:

ASP.NET MVC (.NET Framework)
          |
          |
       10000 req/s


ASP.NET Core (.NET 8)
          |
          |
       50000+ req/s

原因:

    • 高性能 GC

    • Span

    • JIT 优化

    • Kestrel

    • async IO


内存

Framework:

启动:
300MB+

.NET Core:

启动:
几十 MB

特别适合:

    • Docker

    • 微服务

    • 云部署


4. WPF / WinForms 支持

这是很多 Windows 开发者关心的。

.NET Framework

优势:

成熟。

例如:

WPF
 |
.NET Framework 4.8
 |
DevExpress
Prism
MahApps

生态非常完整。


.NET Core / .NET 8 WPF

现在也支持:

.NET 8
 |
WPF
 |
WinForms

例如:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

<PropertyGroup>
<TargetFramework>
net8.0-windows
</TargetFramework>

<UseWPF>true</UseWPF>

</PropertyGroup>

</Project>
完全可以使用:
net6.0-windows
net8.0-windows

5. 第三方库支持

这里是 Framework 的主要优势。

.NET Framework 优势

大量老库:

例如:

xxx.dll
Target Framework:

.NET Framework 4.5
.NET Framework 4.6

直接引用。

特别:

    • 工控 SDK

    • PLC SDK

    • COM组件

    • 老设备驱动

    • CAD接口

例如:

PLC厂商SDK
     |
     |
COM组件
     |
     |
.NET Framework

 


.NET Core 问题

老 DLL:

可能:

Could not load file or assembly xxx

原因:

依赖:

System.Web
System.Configuration
System.Drawing

不存在。


6. 部署方式

Framework

机器必须安装:

.NET Framework 4.8 Runtime

然后:

MyApp.exe
 |
 |
Windows Registry
 |
 |
GAC

.NET Core

支持:

Framework-dependent

机器安装 Runtime:

.NET 8 Runtime

或者:

Self-contained

直接发布:

MyApp.exe

所有dll

runtime

甚至:

MyApp.exe

复制即可运行。


7. DLL加载和插件开发区别

这个与你之前问的 AssemblyLoadContext 很相关。

Framework

程序集加载:

AppDomain
 |
 |
Assembly.Load

插件隔离能力弱。

例如:

PluginA
 Newtonsoft.Json 10

PluginB
 Newtonsoft.Json 13

容易冲突。


.NET Core

提供:

AssemblyLoadContext

可以:

Main App
 |
 |
Default ALC


Plugin1
 |
 |
PluginLoadContext


Plugin2
 |
 |
PluginLoadContext

可以:

    • 独立依赖

    • 卸载插件

    • 多版本 DLL 共存

对于你的:

HyMasterWorkbench
        |
        |
     Modules
        |
   Plugin DLL

.NET Core 明显更合适。


8. C#语言支持

现代 .NET:

支持最新 C#:

功能Framework.NET 8
Nullable 部分
record
Span
async性能 一般 优秀
Native AOT
Minimal API

例如:

.NET 8:

public record User(
    int Id,
    string Name);

Framework:

不支持。


9. 哪些情况选 Framework?

推荐:

① 老项目维护

例如:

ERP
MES
OA
WinForm
WPF

已有:

.NET Framework 4.7

不要轻易升级。


② 强依赖 Windows

例如:

COM
ActiveX
Office Interop
老驱动
老SDK

Framework 更稳。


③ 第三方库只有 Framework

例如:

厂家:

Camera SDK
PLC SDK
Motion Card SDK

只有:

xxx.dll (.NET Framework)

只能 Framework。


10. 哪些情况选 .NET Core / .NET 8?

推荐:

新项目

例如:

Web API
微服务
桌面软件
后台服务
工具软件
AI应用

直接:

.NET 8 LTS

工业软件

你的场景:

打印设备控制软件

+
WPF UI

+
PLC

+
插件

+
数据库

+
图像处理

我建议:

.NET 8 Windows

或者:

.NET 6/8 Windows

架构:

HyMasterWorkbench

.NET 8 WPF

       |
       |
 Prism

       |
       |
 Plugin System

       |
       |
 AssemblyLoadContext


       |
       |
 PLC Communication

11. 迁移难度

大概:

项目难度
Console
Class Library ⭐⭐
ASP.NET MVC ⭐⭐⭐⭐
WPF ⭐⭐⭐
WinForms ⭐⭐⭐
大量第三方DLL ⭐⭐⭐⭐⭐

12. 实际选择建议

结合你的开发方向:

项目类型建议
新WPF软件 ✅ .NET 8 WPF
工业控制软件 ✅ .NET 8 Windows
插件系统 ✅ .NET 8 + AssemblyLoadContext
旧WPF维护 继续 Framework
PLC厂家SDK只有Framework Framework或隔离封装
Web后台 .NET 8
Linux部署 .NET 8


如果是长期维护 5~10 年的软件,我会更倾向:
.NET 8 LTS
+
WPF
+
MVVM
+
模块化插件
+
SQLite/SQL Server

 

而不是 .NET Framework。你之前遇到的 AssemblyLoadContext、资源隔离、插件 DLL 冲突问题,其实正是现代 .NET 才提供较好解决方案的领域。

 

posted on 2026-07-19 17:07  淡若轻风  阅读(3)  评论(0)    收藏  举报