ef6能在Linux系统运行,Asp.Net MVC5 + EF6的项目发布到Linux上,基于Mono的Jexus服务提供支持...

本文介绍了如何安装Jexus独立版及其命令,并记录了在实际部署过程中遇到的问题及解决办法,包括版本兼容性和路径配置等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装

安装jexus独立版的命令是:curl https://jexus.org/release/x64/install.sh|sudo sh

Jexus“独立版”指的是自带.net运行时(mono),不需要在客户服务器安装mono就能正常运行的Jexus版本,该版本只支持 64位Linux操作系统。

注:运行安装命令,需要操作者有root权限。

Jexus包括如下操作命令(首先cd /usr/jexus):

sudo ./jws start  #启动

sudo ./jws stop  #停止

sudo ./jws restart  #重启

配置

修改默认配置或新建一个配置,配置具体的参考官方说明

vi /usr/jexus/siteconf/default

# 指定端口、路径

port=80  #端口

root=/ /netnr/site/demo

#网站URL根路径(虚拟目录)和对应的物理路径,两个路径字串之间必须用空格分开

运行

/usr/jexus/jws start

/usr/jexus/jws start default  #指定站点配置,推荐站点配置名与站点保持一致

新建默认项目运行示例

03bec374ac25c2a019bdd2174017e4c7.png

实战

当前环境版本号

Mono/5.16.0.220 at 2019.01.26

Jexus/5.8.3.18 Linux

a4a2fa090fc2709d8c74a2795479937a.png

项目包的版本号

Microsoft.AspNet.Mvc v5.2.7

Microsoft.AspNet.Razor v3.2.7

运行,问题来了

未能找到 Razor 宿主工厂类型: System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35

1db2298bb7b762a898ec52b8194c83e1.png

Version=5.2.4.0 就是上面对应的 Microsoft.AspNet.Mvc 版本号;看这样子,应该是不支持高版本,尝试切换版本同时参考新建默认项目的版本号,发现目前的版本支持情况:

Microsoft.AspNet.Mvc v5.2.4

Microsoft.AspNet.Razor v3.2.4

Absolute path information is required.Parameter name: assemblyFile

翻译:绝对路径信息是必需的。参数名称:assemblyFile

路径问题,出现这个问题是在登录的时候,即EF第一次连接数据库的时候,与路径相关的代码?想到了反射注册实体类的代码

protected override void OnModelCreating(DbModelBuilder modelBuilder)

{

string assembleFileName = Assembly.GetExecutingAssembly().CodeBase.Replace("Netnr.Data", "Netnr.Mapping").Replace("file:///", "");

Assembly asm = Assembly.LoadFile(assembleFileName);

var typesToRegister = asm.GetTypes()

.Where(type => !string.IsNullOrEmpty(type.Namespace))

.Where(type => type.BaseType != null && type.BaseType.IsGenericType);

foreach (var type in typesToRegister)

{

dynamic configurationInstance = Activator.CreateInstance(type);

modelBuilder.Configurations.Add(configurationInstance);

}

base.OnModelCreating(modelBuilder);

//表名不复数

modelBuilder.Conventions.Remove();

}

变量assembleFileName 不对?,输出日志发现是有问题:

netnr/site/netnr/Bin/Netnr.Mapping.dll

前面少了一个斜杠/,改一下

if (!assembleFileName.Contains(":"))

{

assembleFileName = "/" + assembleFileName;

}

Assembly asm = Assembly.LoadFile(assembleFileName);

在 Windows 系统上,得到的路径一般是: D:/Work/xxxx ,有一个冒号:

还有一个问题没说,路径问题解决后,连接数据也出现了问题,是Jexus版本的问题,更新到最新就行了

以上的问题解决方式是进了Mono群,群里面有 宇内流云 老哥,非常感谢提供的帮助

总结

还是有很多需要注意的地方,版本号、路径等问题

出现了问题寻找的资料不多,生态环境还不够成熟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值