為什麼windows有變態的向下兼容性,而.net framework沒有呢?

微軟的伺服器又慢,裝的簡直。。。


哪裡沒有?.NET Framework從1.1開始可以並行執行,換言之你可以把所有版本的.NET Framework都裝上,不會互相衝突。

我發現很多人對兼容的理解相當之狹隘,甚至忘記了兼容的目的。

兼容不就是為了那些沒人維護的,老不死的程序可以在新的設備上繼續運行么?既然這些程序可以運行,那你要關心這貨是在新的運行時下面運行還是在老的運行時下面運行幹嘛?

誰說兼容就一定要是老的程序可以在新的運行時下面跑啊?


.NET可執行文件本身就可以指定所需CLR版本,不用讓最新的.NET/CLR能支持所有版本吧。每次release的新的mscoree.dll都需要能識別出之前的CLR版本,並載入(安裝了的話),從這個角度說,還是向前兼容的。


.NET Framework 3.5 包括它及之前的所有 .NET Framework。

.NET Framework 4.5 包括 .NET Framework 3.5 之後和 .NET Framework 4.5 及以前的所有 .NET Framework。

另外,如果你有 Windows 安裝介質,則通常可以離線部署 .NET Framework 3.5。參考 Deploy .NET Framework 3.5 by using Deployment Image Servicing and Management (DISM) 的 Using DISM with no Internet connectivity。


因為你可以把多個.net同時裝上,你總不能把多個windows同時裝上然後運行在同一個桌面的session里是吧(不過可以有兼容模式,這是類似的)。

.net的程序依賴的.net framework的內核版本號是寫死在程序里的,也就是說就算你裝了4.5,而且4.5完美兼容2.0,你還是得裝一個2.0才能用2.0編譯的程序。

當然了,exe引用dll的話不用在乎他們依賴的.net版本是否一致,只需要管exe自己的.net版本號就好了。


正好正在學這方面的東西

借花獻佛搬上來

摘自.NET面向對象編程漫談 -金旭亮

.NET程序是以「程序集"為單位模塊化開發的。

一個程序集中包含了「元數據」和「IL代碼」(中間語言--一種面向對象的彙編),而這些元數據又中包含了一些數據,用來說明本程序集由多少資源文件,有多少類,每個類中有多少欄位和方法等等基本信息。這些數據被稱為「元數據」

元數據在.NET Framework中有很重要的作用。正是由於元數據的存在,使程序集成了「自說明(Self-Description)」,即不再需要其他機制(比如那些繁多的註冊表)的幫助,自身就向外界提供了足夠多的信息。

有了元數據,在Win32平台上起到重要作用的註冊表就可以不用了,除非用到一些特殊的資源,一般情況下只需複製包含所有相關程序集和其他相關文件的文件夾,即可在任何一台安裝有相應版本.NET Framework的計算機上運行此程序而無須製作專門的安裝程序。這就是.NET程序部署中的 「XCOPY方式「

使用程序集模式可以很容易實現組件化開發,即使兩個程序集使用了不同的.NET版本,只要安裝兩個.NET版本,他們就可以相互結合,可以說:一個程序集就是一個組件。

微軟用這種方式基本完美解決了Win32時代困擾Windows軟體工程師的 http://baike.baidu.com/link?url=KyB8zoIpMEm3hxNvWwYdefASOsyd1syezjeZHhPMAC-rUlwi-rtiKJhDfMdfrbftq-uQfnFpByRCYrWthISGR_""DLL Hell"的問題。

上面輪子哥也說了,還有我想問。。。鏈接要怎麼加?


軟粉又在說廢話了

把所有.NET Framework都裝上?

假如用戶沒有都裝怎麼辦?

讓用戶自動裝?

假如用戶網路不方便怎麼辦?

程序里打包?

假如用戶嫌安裝包太大直接滾蛋了怎麼辦?

WPF那麼牛x的技術,都吹出花了,為什麼推廣不開,不就是因為運行環境門檻高嗎?


不要把需要高版本支持實現的某些新特性和低版本程序跑不了混為一談。


推薦閱讀:

為什麼 Windows 8 中的 Metro App 啟動速度那麼慢?
Windows 有哪些你相見恨晚的技巧?
你有哪些特殊的Windows使用習慣?
對毫無電腦知識及使用經驗的人來說,自學 Mac OS X 和 Windows 哪一個更容易?
為什麼微軟每次發布新版 Windows 之前都要先發布一個存在大量明顯問題的預覽版?

TAG:微軟Microsoft | MicrosoftWindows | NET |