随笔-15  评论-21  文章-0  trackbacks-0

使C#程序脱离.net框架运行(非飞信方式)

这几天看了很多关于脱离框架运行C#程序的文章,千篇一律,都是讲飞信方案的,此方案涉及一些法律问题,只能自己研究一下,后来用google美国网站搜了一把,看了些文章,无意中发现mono,又用mono关键字到google中国搜了一把,已经有人实现控制台程序脱离.net框架了。

其实就是换mono的公共语言运行时来使用。这样做的好处是体积小,发布免安装。首先,您需要下载mono的最新版。http://ftp.novell.com/pub/mono/archive/1.9.1/windows-installer/2/mono-1.9.1-gtksharp-2.10.4-win32-2.exe,安装后,就可以继续进行了。

1、用Visual Studio创建一个Windows应用程序,假设叫做WinApp,并添加一个按钮。

2、编译此项目,得到一个WinApp.exe文件。

3、自己建立一个文件夹WinApp,其中再建立bin和lib这两个文件夹

4、将mono安装文件夹中的bin和lib子文件夹中需要的文件拷贝至刚才建立的那两个文件夹。mono的默认安装位置是:C:\Program Files\Mono-1.9.1

5、将需要运行的exe文件放入WinApp文件夹。

6、调用,可以使用bat批处理来调用,bin\mono.exe WinApp.exe。(其实写个VC++的小程序调用最好,可以我没学过VC++)

好了,发个代码上来,有兴趣的朋友可以研究一下,7zip打包后仅3.26MB,却实现了免安装微软庞大的框架。此测试项目我在纯净的虚拟机和本机均测试过,但有个bug,mono对中文路径支持不好,如若有中文路径,则无法运行。我后来又试了用C:\Program Files\Mono-1.9.1\bin\mono.exe来执行,则没有中文路径问题。我觉得缺少了哪个文件,一个一个试着拷贝到WinApp文件夹中,再用批处理来执行,还是错误。后来干脆将整个安装目录的文件全搬到WinApp目录中,执行批处理还是失败,可是用C:\Program Files\Mono-1.9.1\bin\mono.exe来执行就是能成功,百思不得其解啊!究竟少了什么东西呢?

博客园单个文件限制在了1.95MB,我试了好多次不成功,大家到我的CSDN上下载吧,0分资源。

http://download.csdn.net/source/661248

清晨阳光
关注 - 0
粉丝 - 0
0
0
(请您对文章做出评价)
« 上一篇:C#中将dll汇入exe,并加壳
» 下一篇:SQL语句中的单引号处理以及模糊查询
posted on 2008-10-02 03:53 清晨阳光 阅读(3149) 评论(5) 编辑 收藏

评论:
#1楼 2008-10-02 09:58 | htqx[未注册用户]
下一代.net 4应该会解决这个问题,发布一个可定制的子集。
 回复 引用   
#2楼 2008-10-02 10:16 | clefoo      
很好
收藏了

 回复 引用 查看   
#3楼 2008-10-02 10:23 | clefoo      
这个我们不知道需要什么文件啊
LZ能不能说明点

 回复 引用 查看   
#4楼[楼主] 2008-10-02 11:43 | 清晨阳光      
至少我这个例子不缺少文件了,如果增加新的东西,请到mono安装目录lib\mono\gac里面找一下,有很多System开头的。简单的项目能应付,要是非常复杂,就说不来了,呵呵!
微软Visaul Studio 2008 SP1 发布后,出了一个叫做Client Profile的东西,是.Net Framework的精简子集,客户端据说安装后大小为27MB,没装2008,不知道咋用。

 回复 引用 查看   
#5楼 2009-03-20 20:18 | 沧海月明      
.net 开发的软件的发布真是一个大问题, 2.0 还好只有20多M, 3.0需要50多M,
3.5基本上网络分发不太可行了. Client Profile也用过, 只能减少客户端的安装内容,不能减少下载内容.
mono倒是个好思路, 据说mono有个AOT编译选项,可以编译为原生代码, 不知道能否在windows下使用.

 回复 引用 查看