脱离.NET框架

使用MONO来脱离框架并且跨平台。

首先到MONO的官方网站下载源代码或者最新版本,然后安装,我用的是最新的2.2版本。打开目录,找到两个子目录,名字分别是bin,lib ,然后复制到另外一个目录里面去【因为安装的时候默认安装在C盘的】然后把你的.net开发的程序也复制到这个目录里面去;假设这个目录名字叫做VM,那么你的这个文件夹里应该有个最少三个文件,一个是bin文件夹,一个是lib文件夹,还有一个就是你写的.net程序了。

然后可以用C++ 编写一个引导程序用来调用你的.NET程序;贴个简单的代码吧:

int main()
{
WinExec("bin\\mono.exe 你的应用程序.exe",SW_SHOWNORMAL);
return 0;
}
当然,为了方便,你可以自己在逻辑里面判断一下,机器里安装的是.NET的哪个版本?如果版本低了,就调用MONO来执行,如果匹配,就不调用MONO了。

如果按照我说的一路操作,肯定是可以运行的了,但是你会发现,现在你的.NET程序是一个绿色软件,但是他所在的目录下lib,或者是bin文件夹的大小是非常恐怖的。。。有 300M以上的大小,这岂不是背离了我们脱离.net框架的初衷了吗?

我们来精简一下吧:【图片不清晰可以到参考资料里的地址查看详细图片资料】

sub-20090323154844-573452601

在bin目录下,保留以下文件,其他的删除即可

然后打开lib文件夹,在2.0文件夹下保留Accessibility.dll,mscorlib.dll,mscorlib.dll.mdb,然后在 GAC里面保留以下文件夹:

这样,整个目录就精简的差不多了,当然,你可以根据自己的需要定制类库。然后打包即可,以我本人机器为例,压缩后的文件是9.8M,比.NET 2.0的框架小了很多,但是比飞信的那个虚拟机还是大了一些;换个角度来看,用mono不涉及版权问题,也可以调用各种数据库,我本机测试操作的是SQL SERVER 2005数据库,一切正常。让你的.NET程序也跨平台吧!只有MONO能做到这一点。

使用.Net Linker 的一个老版本来测试的

通过命令行来提取.net环境的一些类库文件,然后模拟,不知道飞信用的是哪个版本,反正我这个老版本是不太好用,要手动精简目录的。

但是唯一的好处就是兼容性比较好,而且不限制数据库的使用。这个也涉及到版权问题,就不啰嗦了。

精简后的文件大小是8.66M,一般的应用都可以满足了.

 


作者:GangWang
出处:http://www.cnblogs.com/GnagWang/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 
原文地址:https://www.cnblogs.com/GnagWang/p/1781217.html