<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    C#程序脫離.net框架的多種方法與應(yīng)用 [轉(zhuǎn)]

    本文介紹的是C#編寫的winform程序脫離.net框架的方法。【也支持VB.NET和C++.NET】

    原文地址:http://hi.baidu.com/44498/blog/item/dabd37166a11bd10962b437d.html


    很多朋友會(huì)問,為何選擇C#   ?其實(shí)原因很簡單,因?yàn)樗哂衅渌魏握Z言都不具備的生產(chǎn)力。

    軟件工程的發(fā)展,主要目的也就是提高生產(chǎn)力,這個(gè)核心不變,我們的學(xué)習(xí)方向也就不變。

    本文代碼示例支持.NET FRAMEWORK 2.0 ,3.0 , 3.5 ,LINQ等先進(jìn)的解決方案。

    一看就懂,一學(xué)就會(huì),一目了然。。。

    以下所有例子,均經(jīng)過測(cè)試,在2k,xp,2003,vista,2008,Win7下都是可以運(yùn)行的。也包括X86和X64平臺(tái)。

     

    聲明:本文講解的是解決方案,并不提供下載【主要是沒有穩(wěn)定的網(wǎng)盤】,

     

     

    ---------------------------------------------------------

     

     

    1, .Net Linker :中國移動(dòng)的飛信就利用了它的核心。飛信是使用C#在.NET上開發(fā)的。貴,最便宜的版本要1000多美金。【傻瓜式操作,這里不做介紹】

    2,用飛信的虛擬機(jī)來引導(dǎo)自己開發(fā)的.NET程序。

    3,使用mono來達(dá)到脫離.NET框架的效果,可以跨平臺(tái)。【完美支持.net2.0,以及絕大多數(shù).NET3.5,目前已經(jīng)支持WPF系列新技術(shù)了】

    ///////////////////////實(shí)驗(yàn)過程/////////////////////////

    例子1:先說最簡單的,使用飛信虛擬機(jī)來試驗(yàn)吧。

    【不要引用VB編寫的控件或者是類庫,因?yàn)轱w信的虛擬機(jī)功能很少】

    先安裝"飛信2008 3.5版",然后打開安裝目錄,里面有個(gè)VMDotNet文件夾,里面就是.NET虛擬環(huán)境相關(guān)文件了,找到飛信安裝目錄下的"VMDotNet\v2.0.50727\FetionVM.exe"來啟動(dòng)運(yùn)行我們的.NET WinForm程序:

    【可以使用命令行來傳值也可以用其他方式,都是一樣的】例如:

    WinExec("FetionVM.exe 我的程序.exe", SW_SHOW);     //C++ code

    為了方便,我們可以編寫一個(gè)檢測(cè).net框架版本的程序作為引導(dǎo)程序,如果已經(jīng)安裝了.net框架就不用虛擬機(jī),如果沒有安裝,調(diào)用虛擬器來啟動(dòng)程序。【請(qǐng)不要使用C#或者其他托管類型的語言來編寫這個(gè)引導(dǎo)程序,否則失去了意義】。

    很容易吧?但是有個(gè)弊端,你的.NET程序如果要操作類似于SQL SERVER2000,2005,2008 或者是MYSQL,Oracle,DB2等數(shù)據(jù)庫,用這個(gè)飛信自帶的虛擬機(jī)實(shí)現(xiàn)就比較麻煩,所以這個(gè)飛信的虛擬機(jī)只能做簡單的程序應(yīng)用。還有一點(diǎn)大家要注意,使用飛信的虛擬機(jī),涉及到的還有版權(quán)問題。測(cè)試一下,壓縮以后文件大概是6,7M左右,還行。

    例子2:使用MONO來脫離框架并且跨平臺(tái)。注:測(cè)試結(jié)果顯示,使用MONO啟動(dòng).NET程序速度是最快的。

    首先到MONO的官方網(wǎng)站下載源代碼或者最新版本,然后安裝,我用的是2.2版本【目前已經(jīng)有2.4版本了,比較新,支持的更多】。

    為了方便各位朋友試驗(yàn),我提供我本次試驗(yàn)的MONO版本2.2 :

    下載地址:

    安裝完畢,打開目錄,找到兩個(gè)子目錄,名字分別是bin,lib ,然后復(fù)制到另外一個(gè)目錄里面去【因?yàn)榘惭b的時(shí)候默認(rèn)安裝在C盤的】然后把你的.net開發(fā)的程序也復(fù)制到這個(gè)目錄里面去;假設(shè)這個(gè)目錄名字叫做VM,那么你的這個(gè)文件夾里應(yīng)該有個(gè)最少三個(gè)文件,一個(gè)是bin文件夾,一個(gè)是lib文件夾,還有一個(gè)就是你寫的.net程序了。

    然后可以用C++編寫一個(gè)引導(dǎo)程序用來調(diào)用你的.NET程序;貼個(gè)簡單的代碼吧:

    int main()
    {
    WinExec("bin\\mono.exe 你的應(yīng)用程序.exe",SW_SHOWNORMAL);
    return 0;
    }
    當(dāng)然,為了方便,你可以自己在邏輯里面判斷一下,機(jī)器里安裝的是.NET的哪個(gè)版本?如果版本低了,就調(diào)用MONO來執(zhí)行,如果匹配,就不調(diào)用MONO了。

    【這個(gè)例子只是支持簡單的WINFORM和數(shù)據(jù)庫訪問,WEBSERVICE的,在文章末尾】

    如果按照我說的一路操作,肯定是可以運(yùn)行的了,但是你會(huì)發(fā)現(xiàn),現(xiàn)在你的.NET程序是一個(gè)綠色軟件,但是他所在的目錄下lib,或者是bin文件夾的大小是非常恐怖的。。。有300M以上的大小,這豈不是和我們的想法沖突了?當(dāng)然不是;我們來精簡目錄吧:

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

    然后打開lib文件夾,在2.0文件夾下保留Accessibility.dll,mscorlib.dll,mscorlib.dll.mdb,然后在GAC文件夾里面保留以下文件夾【下圖中的類庫全部保留,最好不要?jiǎng)h除】:

    這樣,整個(gè)目錄就精簡的差不多了,當(dāng)然,你可以根據(jù)自己的需要定制需要的各種類庫。然后打包即可,以我本人機(jī)器為例,壓縮后的文件是9.8M,比.NET 2.0的框架小了很多,但是比飛信的那個(gè)虛擬機(jī)還是大了一些;換個(gè)角度來看,用mono不涉及版權(quán)問題,也可以調(diào)用各種數(shù)據(jù)庫,我本機(jī)測(cè)試操作的是SQL SERVER 2005數(shù)據(jù)庫,一切正常。讓你的.NET程序也跨平臺(tái)吧!只有MONO能做到這一點(diǎn)。

    本文原創(chuàng),抄襲的別太過分哦,最起碼也專業(yè)點(diǎn),別圖片都不貼就發(fā)布,

    耽誤別人學(xué)習(xí),那才是最大的犯罪。。。

    例子3:使用.Net Linker 的一個(gè)老版本來測(cè)試的

    通過命令行來提取.net環(huán)境的一些類庫文件,然后模擬,不知道飛信用的是哪個(gè)版本,反正我這個(gè)老版本是不太好用,要手動(dòng)精簡目錄的。

    但是唯一的好處就是兼容性比較好,而且不限制數(shù)據(jù)庫的使用。這個(gè)也涉及到版權(quán)問題,就不啰嗦了。

    精簡后的文件大小是8.66M,一般的應(yīng)用都可以滿足了,呵呵。

    好了,時(shí)間不早了,睡覺了。歡迎大家留言,提出各種不同的見解。

    更新:2009年3月30日

    抽空拿到了.Net Linker 的破解版,用了一下還是不錯(cuò)的,穩(wěn)定性很好,兼容多種數(shù)據(jù)庫。美中不足的是有了MONO的比較,用.net linker虛擬機(jī)以后,程序啟動(dòng)的時(shí)候速度稍微慢了一點(diǎn),和飛信的啟動(dòng)速度一樣。。。不過這也沒辦法,忍了。

    更新:2009年4月14日 支持web service

    今天看到一個(gè)朋友咨詢MONO平臺(tái)上調(diào)用webservice的問題;事實(shí)上,MONO是完全支持web service的     ;我這里也做個(gè)示例吧。

    新建一個(gè)項(xiàng)目,winform的,版本是.net2.0;然后添加一個(gè)引用,引用我們準(zhǔn)備好的web服務(wù)。

    引用的url:http://www.ayandy.com/, 這個(gè)web服務(wù)的功能是天氣預(yù)報(bào)那種的,包括國內(nèi)外400多個(gè)主要城市。【如果圖片不清晰,可以保存到本地然后查看。】

    然后,引用好了,就調(diào)用吧~    我這里例子顯示的是北京當(dāng)天的天氣。

    然后運(yùn)行程序:

    我的機(jī)器上有.net 3.5,當(dāng)然沒問題,但是我們要是在其他機(jī)器上呢?

    切換到虛擬機(jī)里,虛擬機(jī)是xp sp2,沒有安裝.NET任何版本的框架;

    把程序復(fù)制到mono的目錄中,運(yùn)行之。。。

    可以看到,沒有任何問題。。。這里用的MONO版本是2.2,支持的很好。

    大家可以看到,整個(gè)winform程序的按鈕,字體樣式都做了改變,

    因?yàn)镸ONO是在LINUX上的解決方案,沒有使用微軟默認(rèn)的字體和樣式。

     

    本文偶爾更新,更新時(shí)間不確定。感謝大家的關(guān)注。。。

    有問題可以留言。。。下一篇日志《使用托管C++【c++.net】脫離.NET框架實(shí)戰(zhàn)》

    2009.04.23 更新:

    關(guān)于有些朋友提出,MONO到底支持多少種數(shù)據(jù)庫的問題,其實(shí)MONO支持的數(shù)據(jù)庫絕對(duì)比我們想象的多,幾乎是很多我們都沒有用過的。。。好了,我給個(gè)清單,讓大家心里有數(shù)。最近上網(wǎng)少,資料也沒怎么查,就先拿個(gè)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#

    2009.05.27 更新

    要注意的是,在X86下編譯的程序,如果選擇ANYCPU,那么提取后的程序可以在X64下運(yùn)行。

    但是,如果是編譯的時(shí)候選擇X64,那就無法通過LINKER提取。

    posted on 2012-12-01 03:49 Alter 閱讀(842) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 99爱在线精品视频免费观看9| 在线a毛片免费视频观看| 国产精品视频全国免费观看| 永久免费精品影视网站| 日本免费A级毛一片| 91热成人精品国产免费| 无码欧精品亚洲日韩一区| 亚洲午夜未满十八勿入| 在线亚洲午夜片AV大片| 精品成人一区二区三区免费视频| 一道本在线免费视频| 国产一级片免费看| 99精品国产免费久久久久久下载| 免费一级特黄特色大片在线| 亚洲精品一品区二品区三品区| 亚洲成人午夜电影| a级毛片免费高清视频| 国产精品色拉拉免费看| 亚洲日韩欧洲无码av夜夜摸| 亚洲大成色www永久网址| 99re6在线视频精品免费| 免费黄色小视频网站| 亚洲国产精品久久人人爱| 一级毛片免费一级直接观看| www.999精品视频观看免费| 亚洲人成在线播放网站| 18禁亚洲深夜福利人口| 最近免费中文字幕大全视频| 亚洲天天在线日亚洲洲精| selaoban在线视频免费精品| 日本不卡视频免费| 亚洲爆乳少妇无码激情| 性生交片免费无码看人| 亚洲性无码av在线| 毛片免费全部播放无码| 亚洲国产成人久久精品影视| 久久国产精品免费| 亚洲国产精品久久久久婷婷老年| 搡女人免费免费视频观看| 国产l精品国产亚洲区在线观看 | 国内外成人免费视频|