asp.net 运行在linux,Asp.Net WebForm/MVC在Linux的运行的注意事项

起因对于刚刚有意向和已经行动将Asp.Net迁移到Linux服务器的小伙们,会碰到各种打击,常说的一句就是,我的项目在IIS运行的没问题呀,但放到Linux怎么就不行了呢!这是为什么呢?大体上是因为部分历史原因的元素,但大多数还是因为我们没有跨平台的意识,在不经意间在使用了Windows系统的特性(等下详细说);

Asp.Net可以跨平台不是个新鲜的事情,只是我们不了解而已,最早接触Asp.Net跨平台是在13年,那会将Asp.Net WebForm运行在Linux还是有些麻烦,很多人都说玩玩就行了,你还指望上项目呀!那会还不知道Jexus是神马,第一次尝试的时候,Mono安装是必备的,当然全世界都知道的,其次就是安装Apache(没错),然后安装Httpd,最后安装xsp,麻烦吧!相对于现在是很麻烦了,最终还是很好的运行了.

现在要想将Asp.Net在Linux运行,大体上分两种老项目用Jexus来运行和新项目用Asp.Net Core开发用KestrelServer运行.

Jexus是国内牛人宇内流云所写,使用CSharp基于Linux的epoll I/O复用,又针对Linux做了大量的优化,Jexus性能比Xsp好很多,且使用简单,操作方便,最贴心的是使用独立版的话,Jexus已经内置Mono,真是做到了开箱即用.

KestrelServer是微软出品.在著名Libuv事件库上,用CSharp进行封装,很好的继承Libuv的特性,跨平台,如果不知道Libuv,那么可能听说过NodeJs,其实NodeJs底层也是Libuv.所以KestrelServer在性能上是完全没问题.但只能运行Asp.Net Core项目.

TinyFox也是宇内流云所写,同样也是基于Libuv,但宇大重新封装了线程池,TinyFox主要运行基于Owin协议的项目,如果你不知道的话,那要好好的百度一下,这里面有很多的事情.同时也是可以支持传统的Web项目(Asp.Net WebForm/MVC),是以适配器组件将Http请求信息(Owin的请求)转换为Asp.Net WebForm的请求信息进行运行.还有一个很大的优点是支持Socket,方便客户端进行通信.

不掰扯了,想要跨平台,都要摒弃使用系统独有的特性.假如说你使用Windows的特性,即使在Java中也不能好好的玩耍了.

进入正题,新建一个WebForm项目,当然MVC项目也可以的.该项目是使用VS2017所建,当然VS2015应该相差不大.使用VS WebForm模板,看看项目中的文件.

AAffA0nNPuCLAAAAAElFTkSuQmCC

如果看项目引用,简直是头皮发麻呀!我就想建一个项目,至于那么多引用吗?微软真是太贴心了,以至于这些都可能是我们跨平台的罪魁祸首.

先说说常见的FileNotFoundException

8a7d12631f67d5093b21eff7347139b5.png

Mono 5.0开始支持csc编译了,还没有运行在Mono 5.0测试过的,以前的套路是这样的话,在NuGet管理器中卸载Microsoft.CodeDom.Providers.DotNetCompilerPlatform和Microsoft.Net.Compilers.

来看看卸载前后的对比:

AAffA0nNPuCLAAAAAElFTkSuQmCC

说说Microsoft.Web.Infrastructure.dll在VS中发布的Microsoft.Web.Infrastructure.dll文件是不能跨平台的,是因为该库文件使用Windows的特性注册表,在KillBitHelper类中.所以在发布之后,要先把该文件删除掉,没事的,因为Mono很贴心给我们准备一个跨平台的Microsoft.Web.Infrastructure.dll.

AAffA0nNPuCLAAAAAElFTkSuQmCC

在Windows查看Mono程序集列表命令: gacutil -l

AAffA0nNPuCLAAAAAElFTkSuQmCC

在Linux上查看Mono程序集也是同样的命令:

AAffA0nNPuCLAAAAAElFTkSuQmCC

结语对于跨平台,我们要敢于尝试,总有路要趟,总有河要过,对于使用Mono是可以放心的,最典型的就是unity3d(跨平台就是用的Mono),王者荣耀就是unity 3d开发的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值