.NET Core 1.0 釋出囉!微軟開源跨平台新布局,超越你想像的高效能!

我們很高興宣佈 .NET Core 1.0、ASP.NET Core 1.0 還有 Entity Framework Core 1.0 釋出了,可以適用於 Windows、 OS X 與 Linux 上!.NET Core 是一個跨平台、開源而且模組化的 .NET 平台,可用來建立現代的網路應用、微服務、函式庫與控制台應用程式。

在這個版本中包含了 .NET Core 的運行、函式庫、工具與 ASP.NET Core 函式庫。我們同時還釋出了 Visual Studio 與 Visual Studio Code 的擴充讓您可以創建 .NET Core 的專案。 您可以從這裡開始上手。參閱發行說明來取得更詳細的資訊。

Visual Studio 的團隊在今天也釋出了 Visual Studio 2015 Update 3。您需要這個版本才可以建構 .NET Core apps in Visual Studio

我們今天發表 .NET 文件 在 doc.microsoft.com,微軟新的文件服務。您看到的文件只是個開始。你可以參照我們在 GitHub 上 核心文件 的進度。ASP.NET Core 文件也釋出了而且開源

今天我們在 Red Hat DevNation 的會議上發表了這次的版本和我們與 Red Hat 的合作關係。透過 Channel 9 觀看直播,Scott Hanselman 將會展示 .NET Core 1.0。.NET Core 現在可以透過認證的 Container 在 Red Hat Enterprise Linux 和 OpenShift 上取得。此外 .NET Core 完全被 Red Hat 支援並透過 Microsoft 和 Red Hat 整合的支持合作關係得以延伸。參閱 Red Hat 部落格取得更多詳細的資訊。

這是 .NET 自成立以來最大的轉型,將會定義 .NET 的下個十年。我們已經重建了 .NET 的基礎,使其能夠符合現在世界的需求:高度分散的雲端應用、微服務與 Container。

展望未來 .NET Framework、.NET Core 與 Xamarin 都是重要的產品,將會繼續的發展,分別於 Windows、跨平台的雲端與跨平台的行動裝置。.NET Framework 與傳統的 ASP.NET 將會繼續被應用在您現存的工作上。您可以分享程式碼和重新使用您的技能在整個 .NET 的家族,所以你可以決定要使用什麼,還有什麼時候要使用,其中包含 Xamarin 的行動應用程式。因為我們設計 .NET 共享一個函式庫(.NET 標準函式庫).NET Framework、.NET Core 與 Xamarin 的應用程式在未來都可以共享這個新的通用功能。

讓我們開始吧!

在 Windows、OS X 與 Linux 嘗試 .NET Core 與 ASP.NET Core 真的非常容易。您可以在很短的時間完成一個應用程式並執行。您只需要 .NET Core SDK 便可以開始。

最好開始的地方也就是 .NET Core 的首頁。它會提供符合您正在使用的作業系統的 .NET Core SDK 與您需要開始的三~四個步驟。這非常地簡單!

如果您想要使用 Visual Studio,請確定您已安裝 Visual Studio 2015 Update 3。您將會需要安裝 .NET Core Tools for Visual Studio

為了給您一個概念,一旦您安裝了軟體開發套件,您可以輸入下面幾個簡單的指令來建立您第一個「Hello World」程式。首先,生成一個控制台應用程序的模板,第二,重建套件 dependencies,最後建構並運行程式。

 dotnet new

dotnet restore

dotnet run

您將會看到這個(不意外!):

 Hello World!

您可能很快地會覺得「Hello World」很無聊。您可以參閱更多深入的教程在 .NET Core TutorialsASP.NET Core Tutorials

去看看 Announcing EF Core 1.0 的貼文,來了解如何開始使用 Entity Framework Core 1.0。

.NET Core 的旅程

大約兩年前,我們開始從一些 ASP.NET 的客戶收集有關「.NET on Linux」的需求。大約在同一個時間,我們在與 Windows Server 團隊談論有關 Windows Nano,他們的未來,更小的 Server 產品。因此,我們開始一個新的 .NET 專案針對這些新的平台,我們的代號為「專案 K」。我們在這過程中改變了幾次名字、形狀與產品的體驗,每一次都嘗試讓它變得更好,而且可以適用於更多情境,為開發者提供一個更廣泛的基礎。我們很高興可以看到這個專案終於發表為 .NET Core 與 ASP.NET Core 1.0。

而這個專案另一個重要的主題也就是開源。隨著時間的推移,我們注意到所有重要的網路平台皆是開源的。ASP.NET MVC 已經開源很長一段時間了,但是它底下的平台 .NET Framework 卻沒有。我們沒有給深切關心開源的網路開發者一個答案,MVC 是不夠開放的。從今天的宣布我們可以知道 ASP.NET Core 現在是一個從上到下完完全全開源的網路平台。就連文件也是開源的。ASP.NET Core 對於那些在他們的網路架構中將開源視為必要的人,是一個很棒的選擇。

我們想表達我們的感謝對於每個試過 .NET Core 和 ASP.NET Core 並給予我們回饋的使用者們。我們知道有好幾萬的使用者曾經用過 pre-1.0 的產品,謝謝您們!我們收到了很多有關設計選擇、使用者體驗、性能、聯絡等主題的回饋意見。我們已經盡全力應用這些回饋。這個版本改善了很多地方,而若沒有您們我們不可能完成這些,謝謝您們!

如果您不是一個 .NET 的開發者或有一段時間沒有使用 .NET,現在是一個絕佳的時機嘗試使用它。您可以享受 .NET 的生產力與威力,在任何作業系統,使用任何工具,適用於任何應用程式。所有這一切都已完全開源,是由社會各界與微軟的支援共同開發的。到 dot.net 上看看 .NET 眾多的選擇吧!

社群的貢獻

這是整個 .NET 生態系一個很大的里程碑與成就。將近一萬個開發者促成了 .NET Core 1.0。我們從沒想像這麼多人會貢獻給這個產品。我們也對於這些貢獻的品質感到印象深刻。有些重要的元件是這社群一起推動的。做得好,鄉親們!

我們還發現另外八千個開發者正在關注這些 repo,並且人數是高速的加倍成長。我們相信開發者們關注這些 repo 無論是為了尋找個機會貢獻或者是跟上專案的最新進度作為採用 .NET Core 的方式之一。

在此刻,幾乎一半在 .NET Core 相關專案的 pull requests (例如:corefx、coreclr)是來自於社群,比一年前上升了20%!這樣的趨勢很令人難以置信。快看看 貢獻的 pull request 被 merge 到產品中的開發者們。謝謝您們!

下面是開發者統計,在任何一個 .NET Core 相關的 repo 建立 pull request、建立 issue 或提出意見的細項,以每個組織做區分,使用 GitHub API 來計算:

User Count Organization Example repo
5176 aspnet mvc
3804 dotnet corefx
2124 nuget NuGet.Client
560 microsoft visualfsharp

Total unique users: 9723

注意:使用者總數並不等於直接加總,因為有使用者對多個組織均有貢獻(感謝!),我們試著避免重複計算。

注意:微軟組織的計數是特別給那些已存在的 .NET Core 相關 repo,像是 visualfsharp。

注意:這些數字包含微軟的員工,而這(最多)佔了計數的 10%。

Samsung 加入 .NET 基金會

對 .NET Core 有更多的興趣會驅使更深的投入在  .NET 基金會,該基金會目前管理超過 60 個專案。今天我們宣布 Samsung 是最新的成員。今年四月,Red Hat、Jet Brains 與 Unity 都受到 .NET 基金會技術指導小組的熱烈歡迎。

.NET 是一個顯著提高開發者生產力的偉大技術。Samsung 一直在 Github 上貢獻給 .NET Core—特別是 ARM 支援的部分—我們期待貢獻更多給 .NET 開源的社群。Samsung 很高興能加入 .NET 基金會技術指導小組,幫助更多開發者享受 .NET 所帶來的好處。   - Hong-Seok Kim, Samsung Electronics 副總裁。

Samsung 的貢獻相當可觀。他們有一個很棒的開發團隊對 .NET Core 很有興趣。我們很高興他們能成為這團隊的一份子。

.NET Core 的用法

有些客戶等不及最終的 1.0 版本釋出,已經開始在生產環境中的 Windows 和 Linux 上使用 .NET Core 預覽版。這些客戶告訴我們 .NET Core 對於他們的業務有非常的顯著影響。我們期待未來一年看到很多應用程式將被建置。請保持給予我們回饋,讓我們可以決定下次要增進的功能。

根據 Age of Ascent 的背後團隊 IIIyriad Games 的回報,使用 ASP.NET Core 與 Azure Service Fabric 的 效能增加了 10 倍。我們也非常感激他們貢獻的程式碼造就這樣的高效能。謝謝 @benaadams

網易是一間在中國的領導 IT 公司,提供內容、遊戲、社群影音、媒體溝通與商業等線上服務,需要在不斷進化的手機遊戲市場中維持領先的地位,進而選擇了 .NET Core 作為他們的後端服務。相較於先前他們的 Java 後端架構:「.NET Core 為我們的發佈周期減少了 20% 的時間與工程資源上的花費減少了 30%。」當說到有關傳輸量的改進與節省的成本:「此外,它成功減少一半數量所需的虛擬機器。」

我們使用 Linux 上的網站平台的產業基準作為發行的一部份,包含 TechEmpower Benchmarks。從幾個月前開始,我們在我們的實驗室中分享展示我們的發現。我們希望在發佈後能盡快從 TechEmpower 看到官方的數字。

我們實驗室的運行證明 ASP.NET Core 比一些我們的同業還快。在相同的硬體上,我們看到傳輸量是 Node.js 的八倍快,幾乎是 Go 的三倍快。不過我們還沒有結束!這些進步是從那些即將出現在 1.0 版本中的更改。

.NET 開發者知道這平台是生產力的絕佳選擇。我們想要他們知道這同時也是效能表現絕佳的選擇。

.NET Core 1.0

我們現在大約已經談論 .NET Core 兩年了,雖然它在這段時間顯著地改變。在此篇文中重述什麼定義了 .NET Core 1.0 和 .NET Core 1.0 包含了什麼。

.NET Core 是一個全新的跨平台的 .NET 產品。而 .NET Core 的主要賣點是:

  • 跨平台:可以在 Windows、macOS 與 Linux 上執行。
  • 彈性部署:可以包含在您的應用程式或被並行安裝在使用者面向 (user-wide) 或者機器面向 (machine-wide)。
  • 命令行工具:所有產品的情境皆可以在命令行執行。
  • 相容性:透過 .NET 標準函式庫,.NET Core 是與 .NET Framework、Xamarin 與 Mono 相容的。
  • 開源:.NET Core 平台是開源的,使用的是 MIT 與 Apache 2 許可證。文件都依照 CC-BY 的許可。.NET Core 是一個 .NET 基金會的專案。
  • 由微軟支援:.NET Core是被微軟支援的,每項 .NET Core 都是支援

組成

.NET Core 是由下列幾項所組成:

  • 一個 .NET runtime (通用語言執行平台 CoreCLR),提供一個類型系統 (Type System)、組件載入 (Assembly Loading)、Garbage Collector、原生 interop 與其他基本服務。
  • 一組框架庫,提供原始的資料型態、應用程式組成型態 (App Composition types) 與基本公用程式 (Utilities)。
  • 一組 SDK 工具 與語言編譯器,讓開發者可以有基本的體驗,可以在 .NET Core SDK 中取得。
  • 「dotnet」應用程式主機,用來啟動 .NET Core 應用程式。它選擇與承載執行平台 (runtime),提供一個組件載入政策與啟動應用程式。同個主機也以相同的方式,被用來啟動 SDK 工具。

發佈

.NET Core 有兩個主要的發佈:

  • .NET Core — 包含 .NET Core runtime 與框架。目前的版本是「.NET Core 1.0」。
  • .NET Core SDK — 包含 .NET Core 與 .NET Core 工具。目前的版本是「.NET Core SDK 1.0 Preview 2」。

.NET Core 工具目前被認為是「Preview」。我們選擇「Preview」是因為我們尚未完成工具的塑造。我們知道未來還會有一些變化。這並不是對品質的澄清。我們對於現在的品質還蠻開心的,而且每天使用 .NET Core 工具作為我們工程系統的一部份。

大多數人想要從 dot.net/core 上取得 .NET Core SDK。您當然可以,但是,看看我們最新的版本,可以很容易發現兩個不同的發佈。

工作負載

就 .NET Core 本身而言,它包含了一個單一的應用程式模型 — 控制台應用程式 — 這對於工具、本地服務與以文字為基礎的遊戲是實用的。目前已建置在 .NET Core 上的附加應用程式模型皆延伸了它的功能,例如:

.NET Core 工具

您通常從安裝 .NET Core SDK 開始您的 .NET Core 開發。這個 SDK 包含足夠的軟體來建置一個應用程式。它提供您 .NET Core 工具和一個 .NET Core 的副本。當有新的 .NET Core 版本釋出時,您可以下載並安裝他們,而不需要取得新版的工具。

應用程式透過 project.json 專案檔依據特定的 .NET Core 版本指定其相容性,這個工具可以幫助您取得並使用該 .NET Core 版本。您可以在您機器上 Visual Studio、Visual Studio Code 或命令提示字元中多個應用程式間切換, .NET Core 工具總是為每個應用程式的內容挑選符合的 ,NET Core 版本。

您還可以擁有多個版本的 .NET Core 工具在您的機器上,這對於持續整合與其他情境很重要。大多數時候,您只需要有一個工具的副本,因為這樣提供了一個更簡單的體驗。

dotnet 工具

您的 .NET Core 體驗將會伴隨著 dotnet 工具。它提供了一組常用操作的指令,包含重建套件包、建構您的專案與單元測試。它也包含了一個指令用來建立一個新的空專案,讓您可以很容易開始使用。

下列是部份的指令選項:

  • donet new — 初始化一個範例 console C# 專案。
  • dotnet restore — 對給定的應用程式重建相容性。
  • dotnet build — 建構一個 .NET Core 應用程式。
  • dotnet publish — 發佈一個 .NET 可攜式或獨立的應用程式。
  • dotnet run — 從原始碼執行應用程式。
  • dotnet test — 運行測試,透過 project.json 中指定的測試執行器。
  • dotnet pack — 為您的程式碼建立一個 NuGet 套件。

dotnet 與 C# 專案配合得很好。F# 與 VB 的支援則即將到來。

.NET 標準函式庫

.NET 標準函式庫是一個正式的 .NET APIs 規範,適用於所有的 .NET  Runtimes。標準函式庫背後的動機是為 .NET 生態圈建立一個更棒的一致性。ECMA 335 繼續建立一致的 .NET Runtime 行為,但對於 .NET 函式庫實作的 .NET Base Class Library(BCL)並沒有類似的規範。

.NET 標準函式庫允許以下幾個主要的情境:

  • 定義了一套統一的 BCL APIs 給所有的 .NET 平台去實作與獨立於工作負載。
  • 讓開發者能夠產生可攜式的函式庫,可以跨 .NET Runtime,使用相同的一套 APIs。
  • 減少與希望消除 .NET APIs 共享原始碼的條件編譯,僅適用於 OS APIs。

.NET Core 1.0 實作了標準函式庫,就如同 .NET Framework 與 Xamarin。我們將標準函式庫視為重要的創新焦點,有利多種 .NET 產品。

支援

.NET Core 是被微軟支援的。您可以在開發環境中使用 .NET Core 與在生產環境中部署它,並可以根據需求向微軟請求支援。每個發行版本都有一個定義的生命週期,微軟會提供維護、更新或線上技術支援。

團隊採用了一個新的 .NET Core 服務模型,有兩個不同的版本類型:

  • 長期支援(LTS)版本
    • 通常是一個主要的版本,像是「1.0」或「2.0」。
    • 從一個 LTS 版本上市日後開始支援三年。
    • 而一個 LTS 的後續版本上市日後開始支援一年。
  • Fast Track 支援(FTS)版本
    • 通常是一個很小的版本,像是「1.1」或「1.2」。
    • 與母 LTS 版本一樣支援三年。
    • 而 FTS 的後續版本則是從上市日後支援三個月。
    • 一個 LTS 的後續版本上市日後開始支援一年。

有些客戶想要部署應用程式在很穩定的版本,而不想要新的功能直到應用程式被重新開發。那些客戶應該考慮 LTS 版本。

其他客戶希望能盡快利用這些新的功能,特別是那些總是在開發的應用程式。那些客戶應該考慮 FTS 版本。

注意:我們尚未釋出一個  FTS 的版本。.NET Core 是一個 LTS 的版本。

.NET Core 工具遙測(Telemetry)

.NET Core 工具包含一個遙測功能,這樣我們就可以收集有關 .NET Core 工具使用的資訊。了解工具如何被使用對我們來說很重要,這樣我們就可以做出一些改善。有些工具是在預覽的,部分原因是我們對他們將要使用的方法沒有足夠的資訊。遙測僅止於這些工具,並不會影響您的程式。

行為

遙測功能是默認開啟的。收集的數據實際上是匿名的,將會被以匯總的形式發布給 Microsoft 與在 Creative Commons 許可下的社群工程師使用。

您可以關閉遙測功能,透過設定環境變數 DOTNET_CLI_TELEMETRY_OPTOUT (例如:在 OS X/ Linux 上 export,Windows 上 set)改為 true(例如:「true」,1)。這樣做將會在運行時停止收集的程序。

資料點

這功能收集一下這些資料:

  • 使用的指令(例如:”build“、”restore“)
  • 指令的 ExitCode
  • 測試專案中被使用的測試執行器
  • 調用的時間戳記
  • 使用的框架
  • Runtime IDs 是否有出現在「runtimes」節點中
  • 使用的 CLI 版本

這功能並不會收集任何個人資料,像是用戶名稱或 emails。它不會掃描您的程式碼也不會提起任何被視為敏感的專案級資料,像是名字、repo 或作者(如果您設定那些在您的 project.json)。我們想知道的是這些工具如何被使用,而不是您使用這些工具建構了些什麼。如果您發現有敏感的資料被收集了,那會是一個 bug。請 file an issue ,這個問題將會被修復。

我們使用 .NET Core 工具的 MICROSOFT .NET LIBRARY EULA,而我們也使用所有 .NET NuGet 套件。我們最近新增了一個「DATA」的欄位重新印在底下,可以從工具遙測。我們想要遵循一個 EULA 用於 .NET Core,而只打算從工具收集資料,而不從 runtime 或函式庫。

使用 .NET Core 1.0

您可以使用 Visual Studio、Visual Studio Code 或命令行來建置 .NET Core 的程式。Visual Studio Code 是建置 .NET 程式最新的體驗。讓我們看看如何使用它來建置 .NET Core 的程式。

使用 Visual Studio Code

來看一下使用 Visual Studio Code 的體驗吧!

要開始在 Visual Studio Code 使用 .NET Core,先確認您已經下載並安裝:

您可以打開命令提示字元,輸入 dotnet --version,來驗證您是否安裝了最新的 .NET Core,您的輸出應該會像是下圖:

dotnetpic_1

接下來,您可以建立一個新的資料夾,用命令行透過指令 dotnet new,搭建一個新的「Hello World」C# 程式在資料夾裡面,然後用 code . 在那個資料夾打開 Visual Studio Code。如果您沒有程式碼在您的 PATH,您將會要設定它。

如果您尚未安裝 Visual Studio Code 的 C# 語言插件。您將會想要那樣做。

再來,您將會需要建立和設定 launch.jsontasks.json。Visual Studio Code 將會詢問是否要為您建立這些檔案。如果您並不同意這樣做,您將會要自行建立這些檔案。按照以下步驟:

  1. 在 root level 建立一個新的資料夾叫 .vscode,然後在資料夾中建立 launch.jsontasks.json
  2. 打開 launch.json 並按照下圖的配置:
  1. 打開 tasks.json 並按照下圖的配置:
  1. 導覽到 Debug 選單,並點選 Play 圖示,現在您可以執行您的 .NET Core 程式了!

需要注意的是,如果你從一個不同的資料夾中打開 Visual Studio Code,您可能需要更改 launch.jsontasks.jsoncwd 以及 program 的值,指向您的應用程式的輸出資料夾。

您也可以透過在程式碼中設置 breakpoint,然後點擊 Play 圖示來進行 debug。

與 .NET Framework 比較

.NET Core 與 .NET Framework 的主要差別:

  • 應用模型 — .NET Core 不支援所有的 .NET Framework 應用模型,因為其中很多都是建置在 Windows 技術上,如 WPF (建置在 DirectX 上)。但 console 和 ASP.NET Core 應用模型是被 .NET Core 與 .NET Framework 支援的。
  • APIs — .NET Core 包含了許多與 .NET Framework 一樣但是較少的 APIs,且擁有不同的實現(組件名稱不同;在 key cases 中 Type Shape 不同)。目前這些差異通常需要移植原始碼到 .NET Core。.NET Core 實作了 .NET Standard Library API,將會隨著時間增長,包含更多 .NET Framework BCL APIs。
  • 子系統 — .NET Core在 .NET Framework 實作了一個子集的子系統,來讓實作與編程模型更加容易。例如:Code Access Security(CAS)不被支援,但映射 (reflection) 是被支援的。
  • 平台 — .NET Framework 支援 Windows 和 Windows Server,同時 .NET Core 還支援 macOS 與 Linux。
  • 開源 — .NET Core 是開源的,而 .NET Framework 唯讀子集 是開源的。

雖然 .NET Core 是獨特的也跟 .NET Framework 與其他 .NET 平台有顯著的差異,但它可以用原始碼或二元分享技術,很簡單直覺地分享程式碼。

結語

非常感謝各位的回饋與使用。建構出 .NET Core 並且看到這麼多人嘗試使用真的很令我們高興與感激。敬請持續探索與學習本產品的功能。

當我們有新版本的明確計畫時,我們會立即更新 .NET Core Roadmap

感謝您成為 .NET 社群的一份子!

 

本文翻譯自 Announcing .NET Core 1.0


 Capture 1 Capture

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922