移花接木 —— 在其它平台上为 LoongArch 架构打包 .NET 程序

💡 原文中文,约7500字,阅读约需18分钟。
📝

内容提要

龙芯已为LoongArch架构移植了.NET运行时,但由于linux-loongarch64 RID仅为社区支持,NuGet上缺乏相应包。可以通过不使用AppHost发布或将龙芯.NET SDK中的运行时包提取到其他平台的SDK上,实现对linux-loongarch64的应用发布。

🎯

关键要点

  • 龙芯为LoongArch架构移植了.NET运行时,使其能够运行.NET程序。

  • 由于linux-loongarch64 RID仅为社区支持,NuGet上缺乏相应的运行时包。

  • 通过不使用AppHost发布或提取龙芯.NET SDK中的运行时包,可以实现对linux-loongarch64的应用发布。

  • AppHost是启动.NET运行时并调用托管程序入口点的原生程序,无法从NuGet获取LoongArch的运行时包。

  • 使用命令-dotnet publish -r linux-loongarch64 -p:UseAppHost=false可以不使用AppHost发布应用。

  • 可以将龙芯.NET SDK内的运行时包提取到其他平台的.NET SDK上。

  • 旧世界的.NET 8由龙芯中科维护,可以从指定网站获取并解压。

  • 需要将龙芯.NET SDK内的特定目录复制到其他平台的.NET SDK中,并处理符号链接。

  • 在.NET 8中需要手动补充linux-loongarch64运行时包声明。

  • 新世界的.NET 9 RC版本已加入对应的运行时包声明,无需修改配置文件即可发布。

  • 通过dotnet publish命令可以成功发布适用于linux-loongarch64的应用。

延伸问答

如何在LoongArch架构上发布.NET应用程序?

可以通过不使用AppHost发布或将龙芯.NET SDK中的运行时包提取到其他平台的SDK上来实现对linux-loongarch64的应用发布。

什么是AppHost,它在发布过程中有什么作用?

AppHost是启动.NET运行时并调用托管程序入口点的原生程序,现代.NET程序的可执行文件实际上是AppHost的副本。

为什么无法从NuGet获取LoongArch的运行时包?

因为linux-loongarch64 RID仅为社区支持状态,NuGet上缺乏相应的运行时包。

如何提取龙芯.NET SDK中的运行时包?

可以将龙芯.NET SDK内的特定目录复制到其他平台的.NET SDK中,并处理符号链接。

.NET 8和.NET 9在支持LoongArch方面有什么区别?

.NET 8需要手动补充linux-loongarch64运行时包声明,而.NET 9 RC版本已加入对应的运行时包声明,无需修改配置文件即可发布。

如何使用命令行发布适用于linux-loongarch64的应用?

可以使用命令dotnet publish -r linux-loongarch64 -p:UseAppHost=false来发布应用。

➡️

继续阅读