C#编写的winform程序脱离.net框架
C#编写的winform程序脱离.net框架的方法不外乎以下几种,今天有空,特意做了一下测试,现在简单介绍下经验。以下所有例子,本人均亲自实验,在xp,2003,vista下都是可以运行的。
本文引用于:http://hi.baidu.com/44498/blog/item/dabd37166a11bd10962b437d.html
1, .Net Linker :中国移动的飞信就利用了它的核心。飞信是使用C#在.NET上开发的。贵,最便宜的版本要1000多美金。
2,用飞信的虚拟机来引导自己开发的.NET程序。
3,使用mono来达到脱离.NET框架的效果,可以跨平台。【支持ASP.NET,以及.NET3.5】
////////////////////////////////然后我就开始了痛苦的实践过程。
例子1:先说最简单的,使用飞信虚拟机来试验吧。
先安装"飞信2008正式版",然后打开安装目录,里面有个VMDotNet文件夹,里面就是.NET虚拟环境相关文件了,找到飞信安装目录下的"VMDotNet\v2.0.50727\FetionVM.exe"来启动运行我们的.NET WinForm程序:
【可以使用命令行来传值也可以用其他方式,都是一样的】例如:
WinExec("FetionVM.exe 我的程序.exe", SW_SHOW); //C++
为了方便,我们可以编写一个检测.net框架版本的程序作为引导程序,如果已经安装了.net框架就不用虚拟机,如果没有安装,调用虚拟器来启动程序。【请不要使用C#或者其他托管类型的语言或者框架编写这个引导程序,否则无法启动】。
很容易吧?但是有个弊端,你的.NET程序如果要操作类似于SQL SERVER2000,2005,2008 或者是MYSQL,Oracle,DB2等数据库,那就无法用飞信的这个虚拟机实现的,所以这个飞信的虚拟机只能做简单的程序应用。还有一点大家要注意,使用飞信的虚拟机,涉及到的还有版权问题。测试一下,压缩以后文件大概是6,7M左右,还行。
例子2:使用MONO来脱离框架并且跨平台。注:测试结果显示,使用MONO启动.NET程序速度是最快的。比飞信的要快最少3倍。
首先到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了。
【这个例子只是支持简单的WINFORM和数据库访问,WEBSERVICE的,在文章末尾】
如果按照我说的一路操作,肯定是可以运行的了,但是你会发现,现在你的.NET程序是一个绿色软件,但是他所在的目录下lib,或者是bin文件夹的大小是非常恐怖的。。。有300M以上的大小,这岂不是和我们的想法冲突了?当然不是;我们来精简目录吧:
在bin目录下,保留以下文件,其他的删除即可
然后打开lib文件夹,在2.0文件夹下保留Accessibility.dll,mscorlib.dll,mscorlib.dll.mdb,然后在GAC文件夹里面保留以下文件夹:
这样,整个目录就精简的差不多了,当然,你可以根据自己的需要定制需要的各种类库。然后打包即可,以我本人机器为例,压缩后的文件是9.8M,比.NET 2.0的框架小了很多,但是比飞信的那个虚拟机还是大了一些;换个角度来看,用mono不涉及版权问题,也可以调用各种数据库,我本机测试操作的是SQL SERVER 2005数据库,一切正常。让你的.NET程序也跨平台吧!只有MONO能做到这一点。
这个帖子是本人原创,抄袭的别太过分哦,最起码也专业点,别图片都不贴就发布,
耽误别人学习,罪过啊罪过。。。
例子3:使用.Net Linker 的一个老版本来测试的
通过命令行来提取.net环境的一些类库文件,然后模拟,不知道飞信用的是哪个版本,反正我这个老版本是不太好用,要手动精简目录的。
但是唯一的好处就是兼容性比较好,而且不限制数据库的使用。这个也涉及到版权问题,就不啰嗦了。
精简后的文件大小是8.66M,一般的应用都可以满足了,呵呵。
好了,时间不早了,睡觉了。欢迎大家留言,提出各种不同的见解。
更新:2009年3月30日
抽空拿到了.Net Linker 的破解版,用了一下还是不错的,稳定性很好,兼容多种数据库。美中不足的是有了MONO的比较,用.net linker虚拟机以后,程序启动的时候速度稍微慢了一点,和飞信的启动速度一样。。。不过这也没办法,忍了。
更新:2009年4月14日 支持web service
今天看到一个朋友咨询MONO平台上调用webservice的问题;事实上,MONO是完全支持web service的 ;我这里也做个示例吧。
新建一个项目,winform的,版本是.net2.0;然后添加一个引用,引用我们准备好的web服务。
引用的url:http://www.ayandy.com/, 这个web服务的功能是天气预报那种的,包括国内外400多个主要城市。
然后,引用好了以后呢,就调用吧,我这里例子显示的是北京当天的天气。
然后运行程序:
我的机器上有.net 3.5,当然没问题,但是我们要是在其他机器上呢?
切换到虚拟机里,虚拟机是xp sp2,没有安装.NET任何版本的框架;
把程序复制到mono的目录中,运行之。。。
可以看到,没有任何问题。。。这里用的MONO版本是2.2,支持的很好。
本文偶尔持续更新。。。更新时间不确定。。。感谢大家的关注。。。
有问题可以联系我。。。下一篇日志《使用托管C++【c++.net】脱离.NET框架实战》
谢谢大家的关注。
2009.04.23 更新:
关于有些朋友提出,MONO到底支持多少种数据库的问题,其实MONO支持的数据库绝对比我们想象的多,几乎是很多我们都没有用过的。。。好了,我给个清单,让大家心里有数。最近上网少,资料也没怎么查,就先拿个05年的文章参考一下吧。
Mono Supported Database Access- -
Mono has many ADO.NET Data Providers to get you connected.
Providers for Open Source databases:
PostgreSQL: Npgsql is fully managed provider for PostgreSQL and is actively maintained
SQL Lite: actively maintained. Requires sqlite library.
Firebird Interbase: fully managed provider for Firebird and is actively maintained.
MySQL: use the MySQL Connector/Net from MySQL AB which is fully managed and actively maintained by MySQL AB, but it is not included with Mono. There is the ByteFX.Data.MySqlClient provider which is not actively maintained, but it is included with Mono.
Providers for commercial databases:
IBM DB2 Universal Database Requires DB2 client software
ODBC requires ODBC software which is available for Unix and Windows
Oracle requires client software including Oracle Call Interface
OLE DB Requires libgda (http://www.gnome-db.org/) System.Data.OleDb is not actively maintained plus it only works on Linux with GNOME 2.x
Microsoft SQL Server fully managed provider which is actively maintained for Microsoft SQL Server 7.0/2000/2005 databases
Sybase fully managed provider for Sybase 12.x databases and is actively maintained
Older Microsoft SQL Server and Sybase databases Not actively maintained.
Alternative to ADO.NET is GdaSharp (Gnome Data Access)
Gnome Data Access (http://www.gnome-db.org/) GdaSharp is C# bindings to GDA (GNOME Data Access) and is included with GtkSharp (http://www.mono-project.com/GtkSharp), but it requires libgda be installed. Works only on Linux with GNOME 2.x installed.
External Projects that have created ADO.NET Providers that work on Mono:
MySQL Connector/Net from MySQL AB (http://dev.mysql.com/downloads/connector/net/) is the .NET and Mono data provider for MySQL
ByteFX.Data.MySqlClient (http://sourceforge.net/projects/mysqlnet/) is a MySQL Managed data provider. ByteFX.Data is no longer actively developed, but it is included with Mono. Please use the MySQL Connector/Net provider from MySQL AB instead.
NPgsql (http://gborg.postgresql.org/project/npgsql/projdisplay.php) is a fully managed provider for PostgreSQL and is included with Mono.
Firebird (http://sourceforge.net/projects/firebird/) fully managed provider for Firebird databases and is included with Mono.
Advanced Data Provider (http://advanced-ado.sourceforge.net/) ADP, is a transparent factory for ADO.NET which loads providers dynamically.
Other Projects
DB40 (http://www.mono-project.com/DB4O) Open source object database for C#
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/enginetanmary/archive/2009/06/01/4228902.aspx