36 条回复  ·  4010 次点击
lujiaxing 小成 2025-8-26 10:28:23
这个要看情况. 如果你用了什么 Windows Only 的东西 (如 Windows API), 那大概率无解. 其他你可以考虑用 Mono 托管运行. arm 我没试过, x86 linux 确定以及肯定是可以跑 .NET Framework 开发的程序的.
lujiaxing 小成 2025-8-26 10:31:47
@magic3584 那你这都 P/Invoke 了大概率不得行. 除非你能找到相关 DLL 的 Linux 版. 否则这个是兼容不了的. 这个不是你们的问题, 是三方厂商的问题. 人家乐不乐意给你支持. 你接三方设备三方不给你支持麒麟系统那你做再多都是无意义的.
magic3584 楼主 初学 2025-8-26 10:34:40
@Mithril #19 感谢大佬,这活跑不了,硬着头皮也要上的。🥲 我之前没表述清楚,项目情况是之前用 C#开发的依赖 .NET Framework 4.0 运行在 windows 上,现在需要迁移到 arm 的国产系统上运行。 您说的这个硬件问题,我估计得找第三方去提供下。那请问如果第三方没有的话这活是不是就没法干了?除非有源码自己去编译? 还有就是我开发测试的话,机器是只要 arm ubuntu 或者 arm windows 就行呢还是说必须是 arm 的国产化系统才可以?
urlpha 小成 2025-8-26 10:36:37
这个项目应该通过以上楼主的技术评估后,在执行层面做一次研判:项目复杂度如何,团队成熟度如何(包括业务熟悉度、代码熟悉度两个维度),是否有迁移或改造预算,是否有后续升级的项目预算。 1 、如果项目复杂,建议不要动任何东西。可能没有太好的解法,有可能甲方写写情况说明可以继续使用,后续做个二期预算全部替代掉。也有可能只能中止。这完全是商务去考虑和推动的问题。 2 、如不复杂,且团队成熟、有适当的预算,项目迁移.net core 。一些迁移不了的重新开发。 3 、研判情形较多不一一列举了,综合考量,不排除换语言重新开发的可能性。
lujiaxing 小成 2025-8-26 10:37:13
@magic3584 是 所以这东西最关键的问题并不是技术问题 而是你的合作硬件供应商乐不乐意支持的问题
icedx 小成 2025-8-26 10:37:55
时不时可以考虑下 mono 或者 il2cpp
magic3584 楼主 初学 2025-8-26 10:39:40
@lujiaxing #21 大佬您的意思是如果第三方硬件不支持麒麟的话我即使用 Mono 也跑不了吗? 我一点不了解 windows 开发,问题可能有点低级,抱歉
sujin190 小成 2025-8-26 10:43:18
@magic3584 #15 C++代码也是架构和系统绑定的啊,首先动态链接库 windows 叫 dll ,国产底层都是 linux 叫 so ,就算你有源码都不一定能在过程系统上编译出 so 来,这还有工具链、编译器版本和标准库依赖的问题,没源码的话就歇了吧 C#代码就算迁移到.net core 如果不是 asp.net 那一套估计工作量感觉还行,否则几乎等同于重写了吧
Mithril 小成 2025-8-26 10:43:33
@magic3584 对,你得找供应商要这个 ARM 的国产系统对应的驱动和测试程序以及代码。如果他们不提供,那你根本做不了,不是说有测试程序或者驱动的代码重新编译就可以的。 国产系统大部分都是魔改 Linux ,所以你至少要找个 Linux 驱动才能开始你这活。厂家只提供 Windows 驱动的话,你这活没法做的。 Windows 和 Linux 的驱动模型不一样,你没法直接拿 Windows 驱动的代码编译一下就跑在 Linux 上。非常简单的通用设备可能还好点,找个通用的开源驱动改改就行了,但涉及到厂家定制的就没办法了,比如加密狗这种。 你用不惯国产系统开发,可以找个 ARM Linux ,然后找你那国产系统测试。最后即使跑不起来,修改量也不会很大,就是 Debug 级别,改改就行。但你找个 ARM Windows 的话,驱动接口测试程序啥的都不一样,改起来就太麻烦了。
sujin190 小成 2025-8-26 10:46:29
国产化系统基本上内核、标准库、编译器都很老了,这些货一个一个都完全没计划考虑定期升级个内核什么的,真是坑死个人的
返回顶部