【.Net Framework 體積大?】不安裝.net framework 也能運行!?原理簡介補充附帶工具-2

 

打包腳本+工具+運行時 所有分享哈。。。。。(無公司爭議,請放心)html

精簡包:http://pan.baidu.com/s/1i5JpqdB前端

 工具:http://pan.baidu.com/s/1c1PUQK4node

打包腳本:http://pan.baidu.com/s/1o84lYw6設計模式

注意,精簡版的SDK適合開發客戶端程序,服務器版本請安裝完整版本 謝謝!服務器

若有疑問,請留言架構

 

接上一篇框架

【.Net Framework 體積大?】不安裝.net framework 也能運行!?開篇敘述-1工具

 

下一篇性能

【.Net Framework 體積大?】不安裝.net framework 也能運行!?原理補充-3測試

 

  昨天寫了一個引子,仍是有讀者對這套「小把戲」感興趣。那麼不辜負你們的但願,爭取博主不作太監........

  注意:筆者不想談Link的方式,雖然很爽,可是不靠譜。畢竟解析翻譯到原生的應用,微軟到如今也就敢在Xaml系的應用作嘗試,不知道是微軟的策略,仍是自身都信心不大......

  至於Mono項目,筆者就不說它了,BUG真的多的一個接一個的,甚至2.0都過去了,3.0尚未修復。雖然它能夠支持Link ,mkbundle 工具,可是bug太多,不當心就是一個雷......

 

  開篇先談下原生的應用和虛機應用。

  Native的程序,大多基於特定的平臺硬件系統的,這裏的系統 咱們就說三大主流系統中的Win/Mac/Linux。硬件部分嘛,主要是CPU的類型...原生應用跟隨操做系統的兼容性,能夠相似插入內存條同樣,直接跟系統集成,運行速度快,處理數據速度效率高。開發語言:C/C++  彙編?(呵呵,這都上個世紀的東東)  。基於C/C++ 衍生出來 主流的 QT VC .....VC 裏有衍生出個MFC。。。。。。。

  虛機應用,這類應用大可能是基於虛機運行時,也就是將運行時 Run time SDK 安裝到適配的操做系統後,SDK將硬件 操做系統的不一樣 進行了自適應。應用開發者,只須要關注程序的運行效果。就好像坑坑哇哇的石頭牆,摸了一層水泥,而後上面能夠搭載各類形狀的石頭,而不是特定形狀的石頭(去適應石頭縫大小形狀)。特色是:平臺適應強 開發速度快 迭代週期縮短...。開發語言:Python Java .net Framework node.js .......

  虛機應用,又各自有各自的特定。有的是基於腳本執行,有的是強類型的編譯執行。不過大同小異。都離不開運行時!!!

  其餘語言的運行時,咱們不談,有興趣,本身研究。咱們專門談一下.net 的運行時 .net Framework. 

  特色:微軟開發,大品牌。體積大,不能說大,簡直是巨大!前面說了,從2.0 的幾十兆 到3.5的幾百兆 到4.0又回到幾十兆(可是安裝速度真慢的要命,由於要先自解壓)。前面說了,十分佩服微軟的 cab 壓縮,愣是把一個幾百兆的.net 4.0  壓縮到了幾十兆!!!4.5 4.6也都是4系列的。主版本號不變,改變次版本號,說明只是基於4的補丁,可是要親命的是 4.5 拋棄了XP!!!!XP 啊,提到XP 就好像前端開發者對着IE6那個時代!!! 雖然痛苦恐怖,可是,XP在國內的使用羣體依然大的離譜。

 

雖然 Win7普及的效果不錯,可是那畢竟是XP 啊  XP 啊 ............淚奔。

因此,筆者認爲 .net 4到目前爲止 是兼容最全面的Win 系列的系統。對於開發者來講 4版本無疑是一個劃時代的東東,各類應用框架都有,並且性能比3.5好,並且體積小了好多。可是僅僅是相對小了。筆者認爲,它依然巨大。相比較 Python Ruby Node.js Lua的運行時,都小巧,安裝速度快,運行速度也能夠。憑啥.net 這個鬼 體積那麼大!??

實際上是有緣由的。如圖:

 C:\WINDOWS\Microsoft.NET

 

 

 這個基本就是.net 的運行時集中營了(雖然在System目錄也打入了其餘的dll,後面說)

看到這裏,咱們就須要回憶下,.net 的自身的架構

2.0

 

3.5

 

4.0

 

上圖來自:http://www.cnblogs.com/xiaopin/archive/2011/01/07/1929467.html

是否是相似搭積木的方式,一塊塊的耦合上去的?確實,一個完整的.net framework安裝包,須要把整個積木架構搭建起來。可是大多數狀況下,咱們只須要積木的臺子,也就是到 第一個圖中的程序集那一層就完事,有GAC  有運行時 ,就足夠咱們把程序集經過系統引導到 CLR 運行時解析 IL 中間語言到當前平臺的原生代碼,並執行原生代碼。至關於,咱們只須要僱傭一個翻譯,會翻譯其餘語言便可,不必長得高大威猛帥。。。。

  那麼咱們能把上面的枝枝葉葉修建掉麼?筆者測試是能夠的。

  咱們只須要把GAC 的相關程序集,還有運行時便可。而後就是特定的引導目錄+註冊表。

  筆者沒有找到.net 程序引導的順序,不過從筆者實驗的結果來看。微軟打包的程序的時候,給程序集打上了特殊的標識。而後由系統註冊表註冊的特定應用去解析程序集。相似指定默認程序同樣的效果(不知道表述是否正確,歡迎你們指正)。

  好,既然是指定的註冊表來註冊引導程序,那麼哪一個纔是The One? 不賣關子,直接給答案!

  註冊表:SOFTWARE\Microsoft\.NETFramework\

  這個註冊表項,有一個安裝路徑的項,指定到.net的運行時目錄。筆者的機器是64位機器,x86的機器就沒有64.

 

 

 而後,註冊完路徑後,還有它下面的一個註冊表鍵值對:policy

注意其中的鍵值對:

 

這個支持策略,相似設計模式中的策略模式。根據特定的場景,使用特定的策略支撐。咱們註冊4.0後,天然也就支持.net 4.0。

  好,註冊表關鍵就這2個,接下來還有關鍵的一個步驟,在系統目錄 

一個是箭頭指向的dll  還有一個

 

100那個是4.0的 120那個是筆者安裝了 VC 分佈包的 VC++2013的。咱們須要的是上面的那個哈。。。

 

好,把這兩個程序集 在特定的機器上,也打入進去後,好,咱們的精簡版本的.net framework就完成了!!

而後,還能夠在運行時程序集 目錄下,裁剪不須要的程序集 好比什麼 exe的小工具啊 WCF 啊 WPF啊什麼的。最終就能夠粗來一個體積小巧,性能不錯,支持.net 4.0的運行時了。

也就是上面的3步走,有興趣本身嘗試,有疑問,請評論留言。筆者不會發布完整的小安裝包。版權的問題很蛋痛 呵呵,Congratulations..............

  囉嗦一下,爲何添加註冊表就能訪問策略進行引導,跟.net的歷史有關係吧,由於XP系統上面,就已經集成了1.X的.net framework.後續系統Vista win7 server03 08 等等也同樣。因此,註冊個版本號,也就能夠識別粗來了。。。。。

   註冊表獻上:

 

 

Root: HKLM; Subkey: "SOFTWARE\Microsoft\.NETFramework";Permissions:admins-full; ValueType: string; ValueName: "InstallRoot"; ValueData: "{win}\Microsoft.NET\Framework\";Check:WebServerRuntimeNotInstall


Root: HKLM; Subkey: "SOFTWARE\Microsoft\.NETFramework\policy\v4.0";Permissions:admins-full;Check:WebServerRuntimeNotInstall


Root: HKLM; Subkey: "SOFTWARE\Microsoft\.NETFramework\policy\v4.0"; Permissions:admins-full; ValueType: string; ValueName: "30319"; ValueData: "30319-30319";Check:WebServerRuntimeHasNotV4SubKey

不要問我,上面是什麼鬼,inno setup 又是什麼鬼。盡情享用吧.........

相關文章
相關標籤/搜索