前一篇文章中,我们简略的介绍了jws.mono的安装使用,以及我们如何自己动手做一个jws.mono出来。

在文章发表之后的几天里,我一直觉得有点不妥之处,直到后来猛然的意识到:我们自己动手做的jws.mono虽然可以见到info页面,但实际上却是无法挂载任何的.NET站点的。因此这也有必要写下这篇的续篇来对前面的疏漏进行填补。

马上进入本节主题,在本节中我们主要讲述:

  (1)、分析jws.mono的组成及相关组件的作用

  (2)、此mono非彼mono:bin目录详解


1、jws.mono组成及介绍

总的来说,jws.mono包含了两个部分,jexus以及提供它运行环境的mono。下面是“jws.mono.tar.gz”解压之后的组成(注:本篇文章针对的是前一篇中下载获得的jws.mono,其他的可能结构不一样):

直接开始分析吧,如上图所示,jws.mono的根目录包含了四个目录,它们的作用分别是:

  bin:包含Mono编译器的可执行文件目录

  

  etc:包含.NET默认配置文件的目录(machine.config等)

  jexus:顾名思义,放jexus的目录

  lib:里面包含了.NET的程序集、我们编译mono和libgdiplus所得到的so库文件

目录以及结构大概就是这样,各位读者分别点击进入相关的目录之后定会眼前一种熟悉的感觉。

2、bin目录详解

点击进入到bin目录:

各位读者如果对比自己手上编译得出的mono/bin目录,这里的bin目录就显得轻量多了,是的,此处的bin目录是经过裁剪,仅仅包含了提供.NET运行所需的核心组件,并没有其他更多的东西。出了mono-sgen,其余均有脚本组成,而dmcs、gmcs以及mcs分别供给FramWork版本为4.0、2.0(3.5)以及4.5的程序的程序调用。

使用VIM打开其中一个脚本文件:

这里面仅包含了一条命令,命令的作用是调用同级目录下的mono,并指定它的framework版本。

回到文件目录中,我们再仔细观察一下文件“mono”的大小(有兴趣的读者可以看看自己编译的Linux.NET中可执行文件“mono”的大小,相差甚大),大小只有1KB,显然这个叫“mono”的文件绝不会是编译器“mono”,只是一个同名的文件而已。
我在前文中曾说过,出了mono-sgen以外,其余的均是脚本文件,因此我们仍然可以继续用Vim打开它:

到了这里,我们已经一目了然了,这个“mono”文件的作用其实就是先设置并载入与Linux.NET运行相关的资源文件(程序集文件、machine.config等),然后把处理交给了“mono-sgen”处理(提示:mono-sgen里面包含了mono的JIT以及Sgen垃圾回收等组件,好东西)。

这一个文件很重要,我们所有的.NET程序的运行都要经过这一个文件,因此如果这个文件里面的参数(目录之类的)有任何的差错,都会导致我们的.NET程序无法编译运行。

再留意“--runtime”这里,在此处,无论你使用的是那个版本的framework库,其实在jws.mono运行时都是使用framework 4.0(事实上目前流行的CLR主要有2.0和4.0两个版本,而在mono中CLR 4.0是可以兼容CLR 2.0的库,MS.NET则不行)。


回到起点,开篇的时候,我提到的那个问题,各位读者现在知道是什么原因造成的了吗?

绿色版的Linux.NET——“Jws.Mono”(续)的更多相关文章

  1. 绿色版的Linux.NET——“Jws.Mono”

    Linux.NET环境的搭建,不仅是一项比较耗时的事情,同时也是一项略显复杂繁琐的事情.特别是对于近期的几个Mono版本,由于官方所提供的源码包中出现代码文件的缺失,这总让我们的付出变得徒劳.另外一方 ...

  2. jws.mono脚本安装详解

    就在最近两天,最新版本的jws.mono上线了,这个版本除了提供与之前版本拥有的功能外,还额外提供了一个“自动化”的安装脚本,通过执行该脚本,jws.mono将自动快速的安装到指定的目录,同时,通过改 ...

  3. wine on ubuntu linux, and source insight 绿色版的安装

    1.安装一些必要组件 winetricks msxml3 gdiplus riched20 riched30 vcrun6 vcrun2005sp1 wenquanyi 2.拷贝字体 下载网盘中的字体 ...

  4. 使用FlashFXP V3.8烈火汉化绿色版软件连接Linux

    使用FlashFXP V3.8烈火汉化绿色版软件连接Linux 单击右上角的小闪电图标: 特别注意:出于安全考虑,FTP默认禁止使用root账号登陆Linux主机,必须使用除root用户以外的其他用户 ...

  5. Asp连接Oracle (包含绿色版12.2客户端和ODBC驱动安装)

    我能操作的终端电脑是一台linux系统可以上互联网 ,服务器在部署在独立的私网上,不方便上互联网.服务器是2008R2.安装vs不是很方便.其所linux下作开发不是不可以,java php mono ...

  6. [软件推荐]快速文件复制工具(Limit Copy) V4.0 绿色版

    快速文件复制工具(Limit Copy)绿色版是一款智能变频超快复制绿色软件. 快速文件复制工具(Limit Copy)功能比较完善,除了文件复制还可以智能变频,直接把要复制的文件拖入窗口即可,无需手 ...

  7. 激活jws.mono的图像处理

    不得不说,jws.mono真的给我们带来了很大的便利,它免除了我们编译Linux.NET所带来的烦恼,节省了我们的时间.但是金无足赤人无完人,虽然jws.mono已经大致能够提供与我们自行编译相同的效 ...

  8. 世界之窗(TheWorld)浏览器 3.6.1.0 简体中文绿色版

    软件名称: 世界之窗(TheWorld)浏览器 3.6.1.0 简体中文绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小 ...

  9. mysql8.0绿色版安装及mysqldump备份

    1.下载mysql绿色版压缩包https://dev.mysql.com/downloads/mysql/ 2.解压到安装目录后,在根目录创建data文件夹 3.把mysql下的bin目录添加到环境变 ...

随机推荐

  1. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  2. Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)

    Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect) [TOC] 这两个方法的区别 View.ge ...

  3. 逆天Kali带你游遍大江南北~安全之前人铺路!

    0.Linux基础学习(基本指令) http://www.cnblogs.com/dunitian/p/4822807.html 1.Kali安装到移动硬盘或者U盘中~Linux系列通用方法(包括An ...

  4. lua 学习笔记(1)

    一.lua函数赋值与函数调用         在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...

  5. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  6. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  7. C#中如何给Excel添加水印

    我们知道Microsoft Excel并没有内置的功能直接给Excel表添加水印,但是其实我们可以用其他变通的方式来解决此问题,如通过添加页眉图片或艺术字的方法来模仿水印的外观.所以在这篇文章中,我将 ...

  8. Java 经典入门(一)

    一.什么是 Java 技术?为何需要 Java? Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台.有许多应用程序和 Web 站点只有在安装 Java 后 ...

  9. DOM的小练习,两个表格之间数据的移动

    本次讲的是两个表格之间数据的移动,左边的表格移动到右边,并且左边表格移动内容消失. <head>   <meta http-equiv="Content-Type" ...

  10. SQL-union

    集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个结果)联合(union)与连接(jo ...