C#编写的winform程序脱离.net框架

摘要:
用C#编写的Winform程序可以与。net框架。飞信是在.NET上使用C#开发的。使用飞信的虚拟机指导。NET程序。使用单声道实现脱离的效果。NET框架。存在与相关的文件。NET虚拟环境。在Feixin安装目录中找到“VMDotNet v2.0.50727 FetionVM.exe”,启动并运行我们的。NETWinForm程序:

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

免责声明:文章转载自《C#编写的winform程序脱离.net框架》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#调用行情接口API 转 武胜基于 asm 实现比 spring BeanUtils 性能更好的属性拷贝框架下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决springboot2.x项目添加@EnableDiscoveryClient注解找不到的问题

环境: IDEA maven3.0 springboot2.2.0 特别注意springboot的版本,1.0和2.0有很大区别 解决办法: pom添加: <dependency>            <groupId>org.springframework.cloud</groupId>            <...

linux_redhat9下安装FTP服务器

1 ftp服务器的安装 有几种安装方式: 第一种直接利用rpm安装包一个接一个进行安装。在RedHat-Linux9.0的第三张安装光盘下找到rpm目录(或者是从192.168.4.4老徐利用学校的服务器开设的ftp下载,或者是从互联网上下载),把里面的vsftpd-1.1.3.8.i386.rpm文件复制到文件系统的任意目录下。然后,在vsftpd-1....

LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]

先说点理论1.OfType :     即接受基于IEnumerable<T> 接口的信息源,也接受那些在 .NET Framework 1.0 中出现的非参数化的 IEnumerable 接口(non-parameterized IEnumerable interface)。OfType 操作符允许用户在标准的 .NET collection...

react之npm和yarn的相关命令

npm 1、npm修改全局配置 npm config set prefix "D: odejs ode_global" npm config set cache "D: odejs ode_cache" 2、npm获取全局安装的默认目录 npm config get prefix 3、npm永久配置淘宝镜像 npm config set registry...

selenium 配置 chromedriver

参考文档: https://blog.csdn.net/yoyocat915/article/details/80580066?tdsourcetag=s_pcqq_aiomsg http://npm.taobao.org/mirrors/chromedriver/ 今天重新配置了下chromedriver,有些问题记录下来,以备查找。下载chromedr...

提取Windows下的微信提示音

安卓版的微信没有像QQ那样自带音效,而Windows版本微信有,故想从windows版微信里提取微信通知音,提高手机通知音的区分度。 方法很简单,从官网下载Windows微信安装程序后,解压得到WeChatResource.dll文件,然后继续解压该文件,在.rsrc/1033/WAVE下就可以得到微信声音资源文件。复制到其他地方增加文件名后缀.wav即可...