【转载】保哥 釐清 CLR、.NET、C#、Visual Studio、ASP.NET 各版本之間的關係

我常常不仅仅逛 博客园,还会去找国外,特别是台湾的技术部落格,发现好的文章,我便会收录,今天我转载或者全文复制,在Google 博客园,一位叫保哥

釐清 CLR、.NET、C#、Visual Studio、ASP.NET各版本之間的關係 文章,转载主要原因,是保哥写得博文很透彻,有技术含量,但是由于某些环境因素影响,在中国大陆访问他的博客园,网络速度一直很慢,有时候还打不开,特别不能忍受这么好博文,没有给更多的读者看到和学习到。所以先转载一篇让大家看看。下面博文内容,请大家支持。

長久以來,我發現有許多 .NET 開發人員其實不是很熟悉自己每天都在面對的 .NET Framework, C#, Visual Studio 與 ASP.NET 版本之間的關係,以至於經常在找資料時下錯關鍵字,不容易命中想找的資料,今日特別撰文說明這幾項技術與工具在各版本之間的關係。

名詞定義

下列這些名詞,寫 .NET 的人一定都不陌生,但你是否有真正理解呢?如果看了我的摘要文字說明還無法理解的話,建議多查詢相關文件或書籍,或直接在文章最下方留言討論。

  • CLR ( Common Language Runtime )
    • CLR 是 .NET Framework 的虛擬機器元件 (virtual machine component),用來管理執行中的 .NET 程序。
    • CLR 有個重要的流程是 JIT 編譯 (just-in-time compilation) 機制,可以將 .NET 程式編譯過的 中繼語言 (Intermediate language) 編譯為當前 CPU 架構可執行的機器碼 (machine instructions)。
    • CLR 提供記憶體管理型別安全例外處理垃圾回收機制 (GC)、安全性執行緒管理等服務。
    • 無論什麼程式語言,只要是基於 .NET 框架的程式,都必須執行於 CLR 提供的執行環境(虛擬機器)中。
    • CLR 包含一系列 基礎類別函式庫 (BCL) ( Base Class Libraries ),用來提供 .NET 執行時期需要的程式基礎。
    • 在該函式庫中含有一堆 組件 (Assembly) 與 型別 (Type) 定義,如命名空間、類別、介面、列舉、… 等等。
  • .NET
    • .NET Framework 的簡稱,有時候泛指 .NET 相關的各種技術。
    • .NET Framework 包含一系列 框架類別函式庫 ( FCL ) ( Framework Class Libraries ),用來擴充 BCL 不足的地方。
  • C#
    • 是一種 型別安全 (Type-safe) 的 物件導向 (object-oriented) 的程式語言 (Programming Language)
    • 這裡的 型別安全 泛指所有的 C# 物件都是具有型別的,例如 Int32, String,StringBuilder, … 等等都是型別,在各型別的繼承關係中,最上層的型別為 object
    • C# 包含一套 編譯器 (Compiler),可將 C# 程式碼編譯為 .NET 中繼語言 ( IL ) (Intermediate language),執行檔為 csc.exe
    • C# 編譯器在編譯時,可以透過 /langversion 參數指定其編譯的版本,目前支援 ISO-1、ISO-2、3、4、5 等版本。
    • C# 6.0 開始,採用全新的 Roslyn 編譯器平台,跟傳統編譯器的架構差別非常大,且編譯器本身開放原始碼。
    • C# 6.0 的 csc.exe 編譯器改由 NuGet 進行安裝,如需在專案中使用 C# 6.0 語法,則需額外安裝 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 套件。
    • 在開發應用程式的時候又有區分「強型別」與「弱型別」的開發方式。
      • 強型別:存取物件資料時,不需要額外轉型的開發方法,凡事都用明確的型別來表達與傳遞資料。
      • 弱型別:存取物件資料時,用較為抽象的型別來保存資料,需要用到資料時再透過轉型得到真正的型別。
    • 程式語言都有「語言特性」,有些 C# 的語言特性會需要用到 .NET Framework 的特定類別,因此 C# 通常會與 .NET Framework 有版本的相依性。
    • C# 的正確讀音是 C-Sharp,我曾經聽過有人唸成 C-Hash 是錯誤的唸法!
    • 補充一個有趣的點,其實 C# 並不是寫成 C#,而是 C?,請注意這兩者的差別,一個是垂直線是斜斜的,一個是水平線是斜斜的,後面那個才是對的,如下圖示:
  • Visual
    Studio
  • ASP.NET ( ASP.NET 官方網站 )
    • ASP.NET 自 2002 年一月推出的一套網頁開發框架,早期只有 ASP.NET Web Form 架構,直到 2009 年推出以 MVC 為主的開發框架 ( ASP.NET MVC 1.0 ),微軟預計在 2016 Q1 推出 ASP.NET 5 框架 (基於 ASP.NET MVC 的改進)。
    • 無論 ASP.NET Web Form 或 ASP.NET MVC 兩者都是 ASP.NET 框架的一部份,共用 ASP.NET 底層提供的各種函式庫。
    • 許多人會把 ASP.NET 簡稱為 ASP 其實是不洽當的,由於 ASP.NET 之前的網頁開發技術為 ASP (Active Server
      Page),簡稱 ASP 會導致溝通上的混亂。
    • 目前已推出的 ASP.NET Web Form 版本有
      • ASP.NET 1.0
      • ASP.NET 1.1
      • ASP.NET 2.0
      • ASP.NET 3.5
      • ASP.NET 4.0
      • ASP.NET 4.5
      • ASP.NET 4.6
    • 目前已推出的 ASP.NET MVC 版本有
      • ASP.NET MVC 1.0
      • ASP.NET MVC 2.0
      • ASP.NET MVC 3.0
      • ASP.NET MVC 4.0
      • ASP.NET MVC 5.x
      • ASP.NET MVC 6.0 ( 目前還在 beta 階段,此版本等同於 ASP.NET 5 版本 )

CLR 版本關聯

  • CLR 1.0
    • .NET Framework 1.0
      • C# 1.0
  • CLR 1.1
    • .NET Framework 1.1
      • C# 1.1
  • CLR 2.0
    • .NET Framework 2.0
      • C# 2.0
    • .NET Framework 3.0
      • C# 2.0
    • .NET Framework 3.5
      • C# 3.0
  • CLR 4
    • .NET Framework 4
      • C# 4.0
    • .NET Framework 4.5
      • C# 5.0
    • .NET Framework 4.5.1
      • C# 5.0
    • .NET Framework 4.5.2
      • C# 5.0
    • .NET Framework 4.6 ( 又稱 .NET 2015 )
      • C# 6.0

注意事項

  • 新版的 C# 編譯器通常可以編譯舊版的 C# 原始碼,也就是 C# 6.0 編譯器通常有能力編譯 C# 1.0 ~ 6.0 的程式碼,但編譯時一次只能選擇一個版本進行編譯。

.NET Framework 版本關聯

若要查詢 .NET Framework 與各版本的關係,建議可參考 .NET Framework
Versions and Dependencies
 網頁的表格說明,以下為摘要說明:

  • .NET Framework 1.0
    • 使用 CLR 1.0 版,需搭配 C# 1.0 編譯器
    • 內建於 Visual Studio .NET 開發工具
  • .NET Framework 1.1
    • 使用 CLR 1.1 版,需搭配 C# 1.1 編譯器
    • 內建於 Visual Studio 2003 開發工具
    • 推出 ASP.NET 1.1 版,支援 ADO.NET 資料存取技術
  • .NET Framework 2.0
    • 使用 CLR 2.0 版,需搭配 C# 2.0 編譯器
    • 內建於 Visual Studio 2005 與之後的每一版 Visual Studio 開發工具
    • 從 Visual Studio 2005 開始就不再支援 .NET 1.1 開發,因此開發 .NET 1.1 應用程式必須安裝 Visual Studio 2003
    • 推出 ASP.NET 2.0 版,增強 ASP.NET 功能 (並且與 ASP.NET 1.1 不相容),並支援泛型
  • .NET Framework 3.0
    • 使用 CLR 2.0 版,需搭配 C# 2.0 編譯器
    • 內建於 Visual Studio 2005 與之後的每一版 Visual Studio 開發工具
    • 主要針對 WPF, WCF, WF, CardSpace 功能進行強化,新增許多 FCL
  • .NET Framework 3.5
    • 使用 CLR 2.0 版,需搭配 C# 3.0 編譯器
    • 內建於 Visual Studio 2008 與之後的每一版 Visual Studio 開發工具
    • 主要針對 ASP.NET, LINQ, Dynamic Data, … 等許多功能進行強化,請參見 .NET
      Framework 的新功能
       頁面說明
    • 推出 ASP.NET 3.5 版
  • .NET Framework 4
    • 使用 CLR 4 版,需搭配 C# 4.0 編譯器
    • 此版本 CLR 4 擴充了許多 BCL 類別庫
    • 內建於 Visual Studio 2010 與之後的每一版 Visual Studio 開發工具
    • 主要針對 BCL, Portable Class Library, MEF, DLR, code contracts, … 等許多功能進行強化,請參見 .NET
      Framework 4 的新功能
       頁面說明
    • 推出 ASP.NET 4.0 版
  • .NET Framework 4.5
    • 使用 CLR 4 版,可搭配 C# 5.0 或 C# 6.0 編譯器
    • 內建於 Visual Studio 2012 與之後的每一版 Visual Studio 開發工具
    • 主要針對 WPF, WCF, WF, ASP.NET updates, … 等許多功能進行強化,也支援 Windows Store apps 開發,請參見 .NET
      Framework 的新功能
       頁面說明
    • 推出 ASP.NET 4.5 版,並且統一了
  • .NET Framework 4.5.1
    • 使用 CLR 4 版,可搭配 C# 5.0 或 C# 6.0 編譯器
    • 內建於 Visual Studio 2013 與之後的每一版 Visual Studio 開發工具
    • 主要針對 Automatic binding redirection, 偵錯功能, … 等許多功能進行強化,也支援 Windows Phone Store apps 開發,請參見 .NET
      Framework 的新功能
       頁面說明
  • .NET Framework 4.5.2
    • 使用 CLR 4 版,可搭配 C# 5.0 或 C# 6.0 編譯器
    • 內建於 Visual Studio 2013 與之後的每一版 Visual Studio 開發工具
    • 主要針對 New APIs for transactional systems and ASP.NET, System DPI resizing
      in Windows Forms controls, Profiling improvements, ETW and stress logging
      improvements, … 等許多功能進行強化,請參見 .NET
      Framework 的新功能
       頁面說明
  • .NET Framework 4.6 ( 又稱 .NET 2015 )
    • 使用 CLR 4 版,可搭配 C# 5.0 或 C# 6.0 編譯器
    • 內建於 Visual Studio 2013 與之後的每一版 Visual Studio 開發工具
    • 主要針對 Compilation using .NET Native, ASP.NET Core 5, Event tracing
      improvements, Support for page encodings, … 等許多功能進行強化,請參見 .NET
      Framework 的新功能
      頁面說明
    • 推出 ASP.NET 5 Beta 5 (尚未正式版),關於 ASP.NET 5 的推出時程規劃請參見 ASP.NET 5 Schedule and Roadmap 頁面。

從上述整理的版本關聯關係中,你可以發現早期的 .NET Framework, CLR, C#, ASP.NET 版本之間是很容易記憶的,因為 .NET 1.1 搭配 CLR 1.1, C# 1.1
與 ASP.NET 1.1,而 .NET 2.0 搭配 CLR 2.0, C# 2.0 與 ASP.NET 2.0,到了 .NET 3.5 開始出現版本號的變化,因為 .NET 3.5 搭配著 CLR 2.0 與 C# 3.0,光是這點差異,在當時已經讓有些人混淆了,我相信到 2015 年的今天,還是有許多人搞不清楚。從 .NET 4 開始,是一個新的 CLR 版本的起點 ( CLR 4 ),需搭配 C# 4.0,算是好記許多。不過到了 .NET 4.5 有些功能就需要搭配 C# 5.0 才能編譯。

Visual Studio 版本關聯

  • Visual Studio .NET
    • 支援 .NET Framework 1.0
      • 可開發 ASP.NET 1.0
  • Visual Studio 2003
    • 支援 .NET Framework 1.1
      • 可開發 ASP.NET 1.1
  • Visual Studio 2005
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
  • Visual Studio 2008
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5, ASP.NET MVC 1.0
      • 支援 Entity Framework 3.5
  • Visual Studio 2010
    • 開始支援 Visual Studio 擴充套件
    • 開始使用 NuGet 管理 .NET 套件
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5, ASP.NET MVC 2.0
      • 支援 Entity Framework 4.x
    • 支援 .NET Framework 4.0
      • 可開發 ASP.NET 4.0, ASP.NET MVC 3.0, ASP.NET MVC 4.0
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0 (僅 runtime 支援,可編譯,沒有設計工具)
  • Visual Studio 2012
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5
      • 支援 Entity Framework 4.x
    • 支援 .NET Framework 4.0   ( 從 .NET 4.5 開始預設採用 C# 4.0 編譯器 )
      • 可開發 ASP.NET 4.0, ASP.NET MVC 3.0, ASP.NET MVC 4.0, ASP.NET MVC 5.0
    • 支援 .NET Framework 4.5
    • 支援 .NET Framework 4.5.1
    • 支援 .NET Framework 4.5.2
      • 可開發 ASP.NET 4.5, ASP.NET MVC 3.0, ASP.NET MVC 4.0, ASP.NET MVC 5.0
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
  • Visual Studio 2013
    • 專案範本預設改用 NuGet 管理套件
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5
      • 支援 Entity Framework 4.x
    • 支援 .NET Framework 4.0
      • 可開發 ASP.NET 4.0, ASP.NET MVC 4.0, ASP.NET MVC 5.0
    • 支援 .NET Framework 4.5   ( 從 .NET 4.5 開始預設採用 C# 5.0 編譯器 )
    • 支援 .NET Framework 4.5.1
    • 支援 .NET Framework 4.5.2
      • 可開發 ASP.NET 4.5, ASP.NET MVC 4.0, ASP.NET MVC 5.0
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
    • 支援 .NET Framework 4.6
      • 可開發 ASP.NET 4.6
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
  • Visual Studio 2015
    • 專案範本預設改用 NuGet 管理套件
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5
      • 支援 Entity Framework 4.x
    • 支援 .NET Framework 4.0
      • 可開發 ASP.NET 4.0, ASP.NET MVC 4.0, ASP.NET MVC 5.0
    • 支援 .NET Framework 4.5   ( 從 .NET 4.5 開始預設採用 C# 6.0 編譯器 )
    • 支援 .NET Framework 4.5.1
    • 支援 .NET Framework 4.5.2
      • 可開發 ASP.NET 4.5, ASP.NET MVC 5.0
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
    • 支援 .NET Framework 4.6
      • 可開發 ASP.NET 4.6, ASP.NET MVC 5.0
      • 可開發 ASP.NET 5 / ASP.NET MVC 6 (目前還在 beta 階段)
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
      • 支援 Entity Framework 7.x (目前還在 beta 階段)
    • 支援 .NET Core 5
      • 可開發 ASP.NET 5 / ASP.NET MVC 6 (目前還在 beta 階段)
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
      • 支援 Entity Framework 7.x (目前還在 beta 階段)

注意事項

  • Entity Framework 7 將會是一套全新的 Entity Framework 版本,與前版的 Entity Framework 6 是兩套完全不同的產品。
  • 在同一個專案下,就算同時載入 Entity Framework 6 與 Entity Framework 7 也不會發生任何衝突或互相影響。
  • 就算你用 ASP.NET 5 開發網站,一樣可以使用 Entity Framework 6 進行資料存取。

心得分享

我個人其實是從 .NET Framework 2.0 開始進入 .NET 的世界,時光飛逝、歲月如梭,想不到一轉眼 .NET 也寫了將近 10 年了,寫這篇文章讓我回想起 .NET 的演變歷史,我看到了許多技術與框架的興起與衰落,看起來好像每年都在學新的東西,也聽到許多朋友感慨從事 Web / IT 這行好辛苦。當然,從事程式設計這一行,沒有興趣與熱情,確實很難持續進步,但有了興趣與熱情,如果沒有好的基礎,一樣難以為繼,因為每隔幾年就要丟棄原本熟悉的知識,重新學習新的,當然辛苦!

不過在我看來,其實這 10 年來,雖然累積的觀念與知識不少,但其實每年新增的東西會用到的並不多,有些東西用到在學即可,但重點就在於,你真的「學會」了嗎?很多時候,我們為了趕專案,為了解決一個問題,由於基礎知識不足,自己寫不出來,於是上網找到了一段可以執行的原始碼,就直接複製貼上到你的程式碼中,雖然程式可以跑,但其實你並沒有真正「學會」這段程式碼背後的觀念,以至於每次遇到類似的需求,都要不斷找範例、不斷嘗試寫法,沒辦法一次寫對。

我個人面對這些龐雜知識的觀念是這樣的,對於基礎知識,例如 C# 語言特性,就算用不到,也要找時間補齊觀念,因為這是最基礎的東西,學會了這些才有機會掌握每一行程式碼的精隨,也能減少記憶程式碼的負擔。例如 BCL 與 FCL 擁有大量的類別庫,不可能全部學會的,但有些常用的函式庫,就算沒用到也應該先熟悉,其他少用的類別庫,等用到再來學即可,這些函式庫在市面上的 C# 相關書籍其實都會提到,這些書我不建議當成「參考書」來看,而是應該精讀,把知識內化成自己的東西,當有了好的知識基礎,其實學什麼東西都很快。

在未來的世界裡,大家比的並不是「經驗」或「技巧」,而是比誰學得快,比誰的「學習力」強,我們不是天才,學習能力不是與生俱來的,而是靠後天磨練出來的,如果你不花點時間在學習這件事上面,學習力怎麼可能會變強。因此,唯有不斷學習,跳離舒適圈,才能持續保持競爭力。有句話說得好:「接受改變,不如引領改變」,只要態度改變,未來就會不同,與大家共勉之! ^_^

时间: 2024-10-22 13:16:42

【转载】保哥 釐清 CLR、.NET、C#、Visual Studio、ASP.NET 各版本之間的關係的相关文章

CLR/.NET/C#/Visual Studio/ASP.NET各版本之间的关系

名词定义 下列这些名词,写.NET 的人一定都不陌生,但你是否有真正理解呢?如果看了我的摘要文字说明还无法理解的话,建议多查询相关文件或书籍,或直接在文章最下方留言讨论. CLR ( Common Language Runtime ) CLR 是.NET Framework 的虚拟机器元件(virtual machine component),用来管理执行中的.NET 程序. CLR有个重要的流程是JIT编译 (just-in-time compilation)机制,可以将.NET程式编译过的中

转载:详解在visual studio中使用git版本系统(图文)

很多人已经在使用git(或正在转移到git上),在github.com上,也看到不少国内同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github.com/wojilu/wojilu),写了一篇,算是抛砖引玉吧. 这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. http://blog.csdn.net/leichelle/article/details/8002636

如何利用 Visual Studio 自定义项目或工程模板(转载)

在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志.这个时候,是选择在开发的时候手动添加还是自动生成呢? 我们其实完全可以利用 Visual Studio 提供的模板工具自定义一套专属的模板. 自定义项目模板 假如当我添加一个 .cs 文件后,我希望默认添加的文件要看起来像这个样子: 如何实现 1. 随意新建一个工程或使用一个已经存在的工程,在该项目内新添加一个普通的 class 文件,打开后应该和下图长得

《CLR Via C#》Visual Studio编译之后的.pdb文件

在用Visual Studio新建项目之后,进行编译,总会发现.pdb文件: 在CLR Via C#中讲到,.pdb文件是用来调试用的.pdb是Program Database的简写,它能够进行source code和IL之间的映射. The compiler produces a Program Database (PDB) file only if you specify the /debug(+/full/pdbonly) switch. The PDB file helps the de

ubuntu中安装visual studio code-(转载)

在Ubuntu中安装Visual Studio Code 编译自:http://itsfoss.com/install-visual-studio-code-ubuntu/ 作者: Abhishek 原创:LCTT https://linux.cn/article-5423-1.html 译者: Vic020 本文地址:https://linux.cn/article-5423-1.html 2015-05-11 08:20    评论: 3 收藏: 2 本文导航 -安装微软Visual Stu

windows Visual Studio 上安装 CUDA【转载】

原文 : http://blog.csdn.net/augusdi/article/details/12527497  前提安装: Visual Studio 2012 Visual Assist X 安装步骤: 1. Nvidia显卡驱动,装275.33版,这是最新版本驱动,初次安装为了少出错,最好安装比较新版本的驱动. 2. Cuda Toolkit 4.0安装,CUDA 4.0的新特性可以参见其Release Notes,其中包括了本文将要介绍的Thrust库. 3. GPU Comput

Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案(转载)

转载:http://www.th7.cn/Program/c/201303/127343.shtml 原因是Visual C++ 2012 使用了更加安全的 run-time library routines .新的Security CRT functions(就是那些带有“_s”后缀的函数),请参见: <CRT函数的安全增强的版本> 下面给出这个问题的解决方案: 方法一:将原来的旧函数替换成新的 Security CRT functions. 方法二:用以下方法屏蔽这个警告: 1. 在预编译

[转载]Getting Started with ASP.NET vNext and Visual Studio 14

说在转载之前的话:ASP.NET框架之前不断做大,而vNext则是从头开始,对ASP.NET框架进行拆分并瘦身,面对不同的需求而更加灵活,各个拆分出来的模块更加轻量.vNext的出现,对ASP.NET开发人员又是一次洗礼,ASP.NET开发人员是辛苦的,但也幸运的:俗话说,不进则退,vNext - 新的学习方向. --------------------------------------------------------------------------------------------

转载爱哥自定义View系列--Paint详解

上图是paint中的各种set方法 这些属性大多我们都可以见名知意,很好理解,即便如此,哥还是带大家过一遍逐个剖析其用法,其中会不定穿插各种绘图类比如Canvas.Xfermode.ColorFilter等等的用法. set(Paint src) 顾名思义为当前画笔设置一个画笔,说白了就是把另一个画笔的属性设置Copy给我们的画笔,不累赘了 setARGB(int a, int r, int g, int b) 不扯了,别跟我说不懂 setAlpha(int a) 同上 setAntiAlias