请教个 .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 条回复
lujiaxing
2025 年 8 月 26 日
@magic3584 那你这都 P/Invoke 了大概率不得行. 除非你能找到相关 DLL 的 Linux 版. 否则这个是兼容不了的. 这个不是你们的问题, 是三方厂商的问题. 人家乐不乐意给你支持. 你接三方设备三方不给你支持麒麟系统那你做再多都是无意义的.
rrubick
2025 年 8 月 26 日
@Mithril #19
感谢大佬,这活跑不了,硬着头皮也要上的。🥲

我之前没表述清楚,项目情况是之前用 C#开发的依赖 .NET Framework 4.0 运行在 windows 上,现在需要迁移到 arm 的国产系统上运行。

您说的这个硬件问题,我估计得找第三方去提供下。那请问如果第三方没有的话这活是不是就没法干了?除非有源码自己去编译?
还有就是我开发测试的话,机器是只要 arm ubuntu 或者 arm windows 就行呢还是说必须是 arm 的国产化系统才可以?
urlpha
2025 年 8 月 26 日
这个项目应该通过以上楼主的技术评估后,在执行层面做一次研判:项目复杂度如何,团队成熟度如何(包括业务熟悉度、代码熟悉度两个维度),是否有迁移或改造预算,是否有后续升级的项目预算。
1 、如果项目复杂,建议不要动任何东西。可能没有太好的解法,有可能甲方写写情况说明可以继续使用,后续做个二期预算全部替代掉。也有可能只能中止。这完全是商务去考虑和推动的问题。
2 、如不复杂,且团队成熟、有适当的预算,项目迁移.net core 。一些迁移不了的重新开发。
3 、研判情形较多不一一列举了,综合考量,不排除换语言重新开发的可能性。
lujiaxing
2025 年 8 月 26 日
@magic3584 是 所以这东西最关键的问题并不是技术问题 而是你的合作硬件供应商乐不乐意支持的问题
icedx
2025 年 8 月 26 日
时不时可以考虑下 mono 或者 il2cpp
rrubick
2025 年 8 月 26 日
@lujiaxing #21
大佬您的意思是如果第三方硬件不支持麒麟的话我即使用 Mono 也跑不了吗?
我一点不了解 windows 开发,问题可能有点低级,抱歉
sujin190
2025 年 8 月 26 日
@magic3584 #15 C++代码也是架构和系统绑定的啊,首先动态链接库 windows 叫 dll ,国产底层都是 linux 叫 so ,就算你有源码都不一定能在过程系统上编译出 so 来,这还有工具链、编译器版本和标准库依赖的问题,没源码的话就歇了吧

C#代码就算迁移到.net core 如果不是 asp.net 那一套估计工作量感觉还行,否则几乎等同于重写了吧
Mithril
2025 年 8 月 26 日
@magic3584 对,你得找供应商要这个 ARM 的国产系统对应的驱动和测试程序以及代码。如果他们不提供,那你根本做不了,不是说有测试程序或者驱动的代码重新编译就可以的。

国产系统大部分都是魔改 Linux ,所以你至少要找个 Linux 驱动才能开始你这活。厂家只提供 Windows 驱动的话,你这活没法做的。

Windows 和 Linux 的驱动模型不一样,你没法直接拿 Windows 驱动的代码编译一下就跑在 Linux 上。非常简单的通用设备可能还好点,找个通用的开源驱动改改就行了,但涉及到厂家定制的就没办法了,比如加密狗这种。

你用不惯国产系统开发,可以找个 ARM Linux ,然后找你那国产系统测试。最后即使跑不起来,修改量也不会很大,就是 Debug 级别,改改就行。但你找个 ARM Windows 的话,驱动接口测试程序啥的都不一样,改起来就太麻烦了。
sujin190
2025 年 8 月 26 日
国产化系统基本上内核、标准库、编译器都很老了,这些货一个一个都完全没计划考虑定期升级个内核什么的,真是坑死个人的
nivalxer
2025 年 8 月 26 日
最佳做法是迁移到.net core 。如果没有用到几个在.net core 中被废弃或者 windows 专有的一些功能
例如 wcf 不再支持(有第三方库可以支持)、system.drawing 命名空间下的图形处理相关的(有三方库可以支持)
因为提到的 web 程序,不涉及界面的话,整体迁移成本不大,是 mvc 的还是 mvc ,是 webapi 的还是 webapi 。
然后就可以一次编辑,全平台运行了。
irisdev
2025 年 8 月 26 日
@magic3584 #17 迁到 linux+对接硬件?那很麻烦了,这么老的项目供应商都不一定还活着,还活着的大概率是没有适配麒麟的。界面倒是问题不大,反正你前端是 web 端。
tangmanger
2025 年 8 月 26 日
直接升级 到.net 8 就行 前段刚试了 银河麒麟 国产 arm64 windows 下编译好 拷贝过去 启动
rrubick
2025 年 8 月 26 日
@irisdev #31
如果是第三方不支持的话,那就不是我们的锅了。😂
nivalxer
2025 年 8 月 26 日
才看到提到了有硬件的 DLL 调用的话,那个是不行的,硬件驱动库 dll 除非对方提供其他操作系统下编译的产物,否则是调用不了的。
我们某些项目也存在类似情况,这种虽然用了.NET ,但是依然只能设置为在 windows 上运行。
Yjhenan
2025 年 8 月 26 日
@magic3584 #9 .NET Framework 只支持 Windows ,支持 arm 也是 arm 架构的 Windows
rrubick
2025 年 8 月 26 日
@Yjhenan #35
还好我又重新问了 GPT 。
没办法,对这是一点都不懂,所以即使问了 GPT 也只针对我的提问来回答。
ZeoKarl
2025 年 8 月 26 日
那我歪个楼,人和代码只要有一个能跑就行
ConfusedBiscuit
2025 年 8 月 26 日
当我看到了“有硬件交互”这几个字,我就知道,坏了,这不简单。
rogerhesong
2025 年 8 月 26 日
我使用过 jexus 把.NET Framework4.5 的 web 项目迁移到 Linux 平台,目前运行还行,改动也不多
chenxiansheng
2025 年 8 月 26 日
如果是是为了运行,建议你可以在 arm 系统上弄个 wine 环境,这样不用重构代码简易很多

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

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

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

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

© 2021 V2EX