在Linux和Mac OS X系統上運行.NET

jopen 9年前發布 | 25K 次閱讀 .NET

在Linux和Mac OS X系統上運行.NET

英文原文:Running .NET on Linux and Mac OS X

.NET Core 運行時已經看到了實現真正的跨平臺的美好前景,它最終出現在 Linux 和 Mac OS X 平臺上。在上周舉辦的 Microsoft Build 大會上,來自微軟的項目經理 Habib Heydarian 為聽眾分析了這一舉措對開發者們所帶來的益處,并告訴開發者們如何開始探索這些新的機會。在名為“讓 .NET 實現跨平臺”的一場講座中,Heydarian 首先介紹了開發者如何進行一次全新的 .NET Core 安裝。

首先,所有的 .NET 代碼都包含在一個單獨的文件夾中,而無需將它安裝在某個系統級別的位置。這樣,只要愿意,每個 .NET 應用都可以使用一個完全不同的編譯版本。并且在 Windows 系統上進行編譯的代碼也能夠在 Mac OS X 和 Linux 系統上運行。

要在以上系統中運行一個基于命令行的標準 HelloWorld 程序,可使用以下方式:

./corerun HelloWorld.exe

// corereun 是一個原生的運行 app 的環境

// 在 Windows 上,引導 .NET 應用的功能已經內建于操作系統中了

在非 Windows 平臺上使用 .NET,就意味著開發者們能夠使用 ASP.NET 5、CoreCLR,并且從以下共享的功能中受益了:

  1. 運行時組件
    • 64 位的 JIT 編譯器與 SIMD 指令
    • 垃圾回收器
  2. 類庫
    • 基礎類庫
    • NuGet 包
  3. 編譯器
    • .NET 編譯器平臺(Roslyn)

如何獲取 .NET Core

對于 Mac OS X 開發者來說,推薦的方式是使用 Homebrew 以獲取必要的組件。當安裝好 Homebrew 之后,就可以通過以下命令獲取 .NET 組件了:

brew tap aspnet/dnx 
brew update 
brew install dnvm 
dnx . kestrel

Linux 用戶可以從該項目的網站上下載一個包含了所有必要組件的 TAR 文件,隨后按照以下方式進行安裝:

tar zxvf PartsUnlimited-demo-app-linux.tar.gz -C ~/ 
source ~/.dnx/dnvm/dnvm.sh 
dnvm use 1.0.0-beta5-11624 -r coreclr -arch x64 
dnx . kestrel

你一定注意到了一點,在這個兩個平臺上所運行的最后一條指令都是 kestrel 的執行。Kestrel 也正是“跨平臺的 ASP.NET 5 web 服務器”,DNVM 則是 .NET 的版本管理器。目前,該項目只支持 64 位平臺的 Linux 和 Mac OS X。開發團隊仍然在繼續研究如何讓它支持 32 位的系統。

緊隨 Linux 和 Mac OS X 之后,對 FreeBSD 的支持最近也加入到該項目中。對于這三個平臺來說,目前還存在著一個限制,那就是從源代碼編譯 .NET Core 的功能僅限于 Windows 版本。要從源代碼編譯 .NET,開發者需要首先編譯 CoreCLR,然后再編譯 CoreFX。

正如 Windows 平臺上的 .NET 開發者能夠利用平臺調用(PInvoke)功能一樣,Linux 平臺上的開發者也能夠使用 DLL Import 這一命令:

[DllImport (“libc”)] 
private static extern int printf (string format); 
… 
Printf (“Hello, //BUILD 2015!\n”);

下一步計劃

Heydarian 在演講余下的部分談到了該團隊下一步的計劃,以及微軟對這一項目的目標。隨著 Visual Studio 不斷地擴展到非 Windows 的平臺上,微軟希望能夠改進在這些新環境中的調試功能。對于 VS2015 來說,就是要實現遠程調試。而對于 VS Code 來說,首先要從實現本地調試開始。

另一個改進的方向是整體的上線預備。為了在這方面有所突破,團隊打算整合 MSBuild 的支持,并消除目前對 Mono 在這方面功能的依賴。

Heydarian 表示,當 .NET 在 Linux 和 Mac OS X 平臺上正式發布,并成為“RTM”版本之后,微軟將做出以下正式的承諾:

  1. .NET Core 應用能夠在基于 Linux 的生產環境中運行,包括 Docker、本地部署和云端部署
  2. 開發者可以使用 VS Code 或其它任何喜愛的編輯器,對運行在 Mac OS X 環境中的 .NET 代碼進行編輯、編譯與調試
  3. 全部使用無關平臺特性創建的應用在 Windows 與其它平臺上具有相同的行為
  4. .NET Core 將把現有 .NET 云端生態系統的類庫也帶到 Linux 上
  5. 微軟對 .NET 在 Linux 上的支持、服務和維護與其它微軟產品一視同仁

在你的應用中加入對 Linux 和 Mac OS X 的支持

微軟將推出一套 API 可移植性工具,用于對現有的代碼進行分析,找出所需的程序集和目標平臺。目前為止,唯一對兼容性進行了測試的 Linux 分發平臺是 Ubuntu 14.04.2 LTS。雖然沒有明確地表示不支持其它的 Linux 分發平臺,但無法保證在這些平臺上是否能夠正常運行。

Heydarian 認為目前來看,微軟所提供的 .NET 與 Mono 版本相比,所針對的市場方向并不相同。Haydarian 表示:“……雖然[Mono]在移動場合的表現優秀,但它并不是為服務器或云端生產環境的使用場景而設計的……”,而 .NET Core 傾向于在具有高吞吐量、高伸縮性,以及更高的修復前平均時間(MTTF)的服務器環境中所使用。

希望通過 .NET 即將提供的功能,從跨平臺方式中受益的開發者可以首先從 VS2015RC 中的 ASP.NET 5 項目模板開始打造及測試應用,并且參考 GitHub 上的 ASP.NET 示例應用 Parts Unlimited。凡是能夠在 Windows 上的 ASP.NET 5 中成功運行的應用,一旦等到 .NET Core RTM 之后,就能夠無縫地遷移至 Linux 平臺上。

來自: InfoQ

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!