Mirror site is read only www.netnr.com
netnr 2019-02-02 10:56:47 2022-04-11 14:31:27 👁1.3K 💬0

安装

安装 Jexus 服务,https://jexus.org/

安装 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  # 指定站点配置,推荐站点配置名与站点保持一致

新建默认项目运行示例

09590200e9

实战

当前环境版本号

Mono/5.16.0.220 at 2019.01.26
Jexus/5.8.3.18 Linux

1019104bda

项目包的版本号

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

1023575ffb

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<PluralizingTableNameConvention>();
}

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

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

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

if (!assembleFileName.Contains (":"))
{
    assembleFileName = "/" + assembleFileName;
}
Assembly asm = Assembly.LoadFile (assembleFileName);

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

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

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

总结

  • 还是有很多需要注意的地方,版本号、路径等问题
  • 出现了问题寻找的资料不多,生态环境还不够成熟

链接