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

19 天前
 magic3584

有一个老项目,是用 .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 ,如果用树莓派是否可行。
2433 次点击
所在节点    .NET
49 条回复
luojianxhlxt
19 天前
如果 4.8.1 真的支持 arm ,那首选 1 ,代码基本不用改
fzdfengzi
19 天前
可以在树莓派上安装 mono 环境,直接运行.NET Framework 程序。开发环境不用变
NightFlame
19 天前
用.net core ,不需要重写代码。
forgottencoast
19 天前
@NightFlame
一字不改,我是不信的。
ration
19 天前
如果不是桌面端应用,应该还是比较好迁移的,用.net core ,前期可能修改的比较多,后期维护更好
Yjhenan
19 天前
arm 架构的 Windows 系统吗?如果不是,那就迁移到 .NET Core 吧
magic3584
19 天前
@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
19 天前
还是要看你的项目核心功能在哪,有没有用到一些 Windows 独有的功能,或者一些和系统贴的很近的库。

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

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

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

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

虽然都是 Web 应用,但你这程序如果底层用了一些第三方的库,P/Invoke 了一些 C++或者用驱动读写了一些硬件,那大概率是转移不了的
------------------
我理解的是把库和相关方法替换掉就行了,C++那些代码我不用动。所以我不太懂为什么转移不了,请大佬指点。
magic3584
19 天前
@luojianxhlxt #1
wc !我问了 GPT ,说即使支持 arm 但是仍然只限于 windows!
magic3584
19 天前
@irisdev #13
抱歉误导大佬了,我搜了下即使升级也是只支持 windows, 现在我是想跑在 arm 的国产系统上
unhappy224
19 天前
可以试试 mono 应该大部分都没问题,之前我试过在 arm mac 下运行 .net 4.5 的 cli 程序,没什么问题
Mithril
19 天前
@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
19 天前
这个要看情况. 如果你用了什么 Windows Only 的东西 (如 Windows API), 那大概率无解. 其他你可以考虑用 Mono 托管运行. arm 我没试过, x86 linux 确定以及肯定是可以跑 .NET Framework 开发的程序的.

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

https://ex.noerr.eu.org/t/1154926

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

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

© 2021 V2EX