WIP:在龙芯上的尝试编译与测试 dotnet core
本文仍处于修订中
写在开始之前
我们的主要业务基于 dotnet core 2.x 与 3.1 完成,目前 dotnet core 3.1 支持的 CPU 架构列表中还不包含龙芯,且在 gitlab issue 中表示官方当前没有对 MIPS 的支持计划。
更具体操作系统与 CPU 架构列表见 [Download .NET Core 3.1](https://dotnet.microsoft.com/download/dotnet-core/3.1
6月下旬,龙芯团队宣布在 dotnet/coreclr 基础上完成了MIPS64 的移植工作 Open-sourcing CoreCLR MIPS64 Port #38069,计划实现 3.x 版本并贡献到上游 dotnet/runtime。
按照相关 issue 里的指引,这里对编译了移值工作,进行了一些测试。
具体的进度
作为下游开发者,想知道距离生产环境使用还有多远,必须先提及 dotnet core 应用程序的发布/部署方式
1. dotnet core 支持两种方式的发布/部署
- 独立应用(self-contained)
- 依赖于运行时(runtime-dependent)
# ... FROM mcr.microsoft.com/dotnet/core/runtime:3.1WORKDIR /appCOPY --from=build /app .ENTRYPOINT ["dotnet","dotnetapp.dll"]
2. dotnet core 的组成部分作为编译型语言,和 Java 源代码被 javac 编译为字节码再交由 JVM 运行一样,csharp/vb.net 等源代码被编译为内容主要是 IL(中间语言,平台无关)的 Windows PE 文件(可用于所有操作系统),然后交由 CLR 运行。
dotnet core 由以下若干部分组成:- 运行时与框架库,包含 .NET Core Runtime 与 ASP.NET Core Runtime,平台特定
- SDK 和编译器:开发相关
- dotnet 命令:启动 dotnet 应用及作为交互式工具链
由前文的 Dockerfile 可以看到,依赖于运行时的 dotnet core 应用通过mono,unity3d 都是运行时实现,在此略提及
dotnet xxxx.dll运行,这里有若干层意义:[list=1]
- 编写本机/原生代码,参考 Write a custom .NET Core host to control the .NET runtime from your native code。
- 使用编译得到的 corerun,参考 Using CoreRun To Run .NET Core Application。
- dotnet/coreclr:运行时源码,合并入dotnet/runtime
- dotnet/corefx:标准库源码,2020/7/7,合并入 dotnet/runtime
- dotnet/core-setup:编译仓库,2020/7/7,合并入 dotnet/runtime
- dotnet/cli:命令行工具链源码,2020/7/7,合并入 dotnet/sdk
dotnet/core-setup 比较特殊,它用来编译 runtime ,类库和宿主程序。注意直到这一步 dotnet 命令才终于可用.
龙芯团队首份释出的源码是 dotnet/coreclr,然后于7月7日释出了 dotnet/corefx 和 dotnet/corefx 仓库,目前还在编译中,完成后会进一步补充本文内容。
没有找到相关结果
已邀请:
2 个回复
leoninew
赞同来自: QPCmips
2. 希望提供 markdown 编辑器,当前编译器需要大量的排版工作
leoninew
赞同来自: