让mono运行Asp.Net Core项目
起因
其实.Net Framework支持Asp.Net Core项目的,支持最高到Asp.Net Core 2.2,为什么.Net Framework支持Asp.Net Core项目呢?这个就像是先有鸡还是先有蛋的缘故。这个得说一下Asp.Net Core 和 .Net Core的关系,最初是先有Asp.Net Core项目,这会是Asp.Net Core运行.Net Framework运行时的,直到.Net Core出来后,慢慢的Asp.Net Core团队才放弃在.Net Framework运行Asp.Net Core.
先看看.Net Framework、Mono、.Net Core对各种体系CPU的支持

上图是分别从Mono(github)和 .Net Core(github)现有支持的。Mono一部分cpu体系是有社区支持的。
在对比CPU支持,发现.Net Framework支持是最少的,只支持X86,其次是.Net Core,支持最多的是Mono。
在信息国产化和软件国产化的前提下。使用Mono将老的项目迁移到Linux下,是个很不错的选择。如果是龙芯的话只能用Mono了,龙芯的cpu是基于mips的,在mips原有的指令集上,又扩展了指令。龙芯的人对Mono的支持并不热衷。不过对.Net Core倒是很热情的。从github看到的 16年说支持的,后来就没后来的。
其他的国产CPU(如飞腾)大多数基于ARM扩展的.使用Mono和.Net Core都是可以的。
印象中还有神威(超算),是基于alpha,这个Mono也不支持的。
Asp.Net Core 2.2及小于2.2的版本
1.创建.Net Core web项目2.设置发布的选项
3.看看发布的目标框架是否为.Net Framework 4.6.1,

4.在发布的文件夹内,找到和程序同名的exe文件,Windows下双击运行,Linux下可用 mono aaa.exe

5.运行程序
6.在浏览器中访问程序
Linux上要安装mono或者jexus(新版本有jwss 可以执行exe)
如果先运行更高的版本,只能使用Mono
Mono可以支持Asp.Net Core 3.0的项目,从GitHub上看Mono源码,分别使用到mono-sgen.dll(Windows下dll,Linux下so,Mac下dylib)和coreclr.dll以及System.Private.CoreLib.dll(这个动态库是区别于.Net Core的同名动态库),在mono/netcore/src/LinkerDescriptor/System.Private.CoreLib.xml文件中看到一些映射类型关系,推测该库是Mono运行.Net Core的映射.虽然目前没有运行成功,等着月底Mono 6.6的发布吧!
秋风
2019-11-12