请教个 .NET Framework 4.0 升级以运行在 arm 上的问题

2025 年 8 月 26 日
 rrubick

有一个老项目,是用 .NET Framework 4.0 开发,在 web 页面调用并运行在 windows 上。 现在有一个需求:需要迁移到 arm 上运行。

我搜索了一下,解决方案是:

  1. 升级到 .NET Framework 4.8.1 及以后版本,原生支持 arm
  2. 用 .NET Core (.NET 或者 ASP.NET ) 重写

由于本人从未接触此类开发,所以有疑问想请教大佬:

  1. 以上哪种方案对于我来说是比较省心的
  2. 我是否必须要在 arm 架构的机器上开发,比如 MacOS 、arm Ubuntu ,如果用树莓派是否可行。
4895 次点击
所在节点    .NET
49 条回复
luojianxhlxt
2025 年 8 月 26 日
如果 4.8.1 真的支持 arm ,那首选 1 ,代码基本不用改
fzdfengzi
2025 年 8 月 26 日
可以在树莓派上安装 mono 环境,直接运行.NET Framework 程序。开发环境不用变
89adc64
2025 年 8 月 26 日
用.net core ,不需要重写代码。
forgottencoast
2025 年 8 月 26 日
@NightFlame
一字不改,我是不信的。
ration
2025 年 8 月 26 日
如果不是桌面端应用,应该还是比较好迁移的,用.net core ,前期可能修改的比较多,后期维护更好
Yjhenan
2025 年 8 月 26 日
arm 架构的 Windows 系统吗?如果不是,那就迁移到 .NET Core 吧
rrubick
2025 年 8 月 26 日
@fzdfengzi #2
我之前搜索过,说是已经不维护了,所以正文方案里没有加这一项,不过可以尝试一下。

https://www.mono-project.com/download/stable/

The last major release of the Mono Project was in July 2019, with minor patch releases since that time. The last patch release was February 2024.
Mithril
2025 年 8 月 26 日
还是要看你的项目核心功能在哪,有没有用到一些 Windows 独有的功能,或者一些和系统贴的很近的库。

虽然都是 Web 应用,但你这程序如果底层用了一些第三方的库,P/Invoke 了一些 C++或者用驱动读写了一些硬件,那大概率是转移不了的。

或者只是单纯的 Web 应用,但是那种非常传统的 ASP WebForm + IIS ,也用了一堆第三方控件。那迁移也是要重写的。即便是.NET 5 也没有这东西了。

如果网页结构不是很复杂,建议用.NET Core 自带的新 ASP 直接重写。前端使用现代的框架,Vue 或者 React ,不要用 Blazor 。这样你用 LLM 做 Vibe Coding 很快就能写个差不多的出来。

另外新的.NET 你可以直接在 Windows 或者其他开发机上写代码,编译的时候再选平台就行了。如果不带 runtime 的话取决于你用的库,纯托管的甚至都可以不选。
rrubick
2025 年 8 月 26 日
@Yjhenan #6
不是,是麒麟。
我只知道架构会有影响,这个系统也会有影响吗?
opengps
2025 年 8 月 26 日
只能重写,用 .net7 比较稳妥
opengps
2025 年 8 月 26 日
@opengps #10 大部分代码都是直接拷贝,但总会有些引用库可能不支持.net7 需要替换或者自己补充逻辑重新实现
yicong135
2025 年 8 月 26 日
如果引用的第三方库不一定支持 arm
irisdev
2025 年 8 月 26 日
肯定是方案一,迁移到 net core 引用的第三方库的兼容性会把你搞死
89adc64
2025 年 8 月 26 日
@forgottencoast 如果不依赖于 windows 底层库的,用 IDE 选择新的.net core 框架,还要做改什么
rrubick
2025 年 8 月 26 日
@Mithril #8
我也不清楚用了什么库,现在只知道之前项目用 C# 依赖了.NET Framework 4.0 ,然后在一个网页里面调用的,其中有硬件交互。

虽然都是 Web 应用,但你这程序如果底层用了一些第三方的库,P/Invoke 了一些 C++或者用驱动读写了一些硬件,那大概率是转移不了的
------------------
我理解的是把库和相关方法替换掉就行了,C++那些代码我不用动。所以我不太懂为什么转移不了,请大佬指点。
rrubick
2025 年 8 月 26 日
@luojianxhlxt #1
wc !我问了 GPT ,说即使支持 arm 但是仍然只限于 windows!
rrubick
2025 年 8 月 26 日
@irisdev #13
抱歉误导大佬了,我搜了下即使升级也是只支持 windows, 现在我是想跑在 arm 的国产系统上
unhappy224
2025 年 8 月 26 日
可以试试 mono 应该大部分都没问题,之前我试过在 arm mac 下运行 .net 4.5 的 cli 程序,没什么问题
Mithril
2025 年 8 月 26 日
@magic3584 那很麻烦,如果这活不是砸死你头上了,建议不要接。

C++,还是硬件驱动,是大概率没法直接二进制跨平台的。你至少也需要重新编译才行。你这.NET Framework 4.0 的项目估计已经很老了,你找对应硬件的 ARM 平台和系统驱动,C++代码就得找半天。找到代码了,编译测试好了,才是你.NET 代码的事。这还是不算你 C++代码根本没法跨平台的事。你那 C++部分要是用了什么 ATL ,MFC ,或者一堆 Windows API ,迁移它还不如重新找个供应商。

然后你得测试从 C#代码里调用你 C++的 Wrapper ,这个你怎么都要改(至少 Linux 上你的库大概率不叫 x.dll )。这个测试你得用对应平台才行。比如你用 ARM 的 Ubuntu ,甚至用 ARM 的 Windows 11 ,也得找个测试机才可以。

最后才是你那 Web App ,迁移这层相对来说是最简单的了。

所以你以为是迁移一个 Web 应用到 ARM 平台,实际上是一整个大深坑。而且最难的根本不在.NET 部分,而是你要把你硬件那堆东西先迁移到 ARM 才行。
lujiaxing
2025 年 8 月 26 日
这个要看情况. 如果你用了什么 Windows Only 的东西 (如 Windows API), 那大概率无解. 其他你可以考虑用 Mono 托管运行. arm 我没试过, x86 linux 确定以及肯定是可以跑 .NET Framework 开发的程序的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1154926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX