在 Linux 和 Mac OS X 系統上執行 .NET
.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,並且從以下共享的功能中受益了:
- 執行時元件
- 64 位的 JIT 編譯器與 SIMD 指令
- 垃圾回收器
- 類庫
- 基礎類庫
- NuGet 包
- 編譯器
- .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”版本之後,微軟將做出以下正式的承諾:
- .NET Core 應用能夠在基於 Linux 的生產環境中執行,包括 Docker、本地部署和雲端部署
- 開發者可以使用 VS Code 或其它任何喜愛的編輯器,對執行在 Mac OS X 環境中的 .NET 程式碼進行編輯、編譯與除錯
- 全部使用無關平臺特性建立的應用在 Windows 與其它平臺上具有相同的行為
- .NET Core 將把現有 .NET 雲端生態系統的類庫也帶到 Linux 上
- 微軟對 .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 平臺上。
相關文章
- Windows、Linux、Unix、Mac OS X系統哪個更好用?WindowsLinuxMac
- Unix、Windows、Mac OS、Linux系統故事WindowsMacLinux
- win系統如何在mac上執行Mac
- 如何通過 SSH 在遠端 Linux 系統上執行命令Linux
- 轉:在Linux上執行WinFormLinuxORM
- 在 Windows 系統上執行 VIC 水文模型Windows模型
- 在VSCode上執行Python程式(Mac)VSCodePythonMac
- wine-在mac上執行exe執行檔案Mac
- 在 Ubuntu 上安裝 .NET SDK 或 .NET 執行時Ubuntu
- 如何確保寶塔皮膚在Centos7.x系統上穩定執行?CentOS
- Windows Subsystem for Linux 允許在Windows 11中執行Linux系統WindowsLinux
- 在Mac系統執行dlib人臉識別DemoMac
- 在 WASI 上執行 .NET 7 應用程式
- 在Mac OS系統中安裝Python【流程簡單】MacPython
- Mac OS X 上的PHP開發環境 vimMacPHP開發環境
- 在Linux上以容器方式執行安卓系統的開源專案:WaydroidLinux安卓
- Mac OS X 顯示和隱藏檔案Mac
- Linux系統執行命令方法Linux
- Windows+VSCode編譯在Linux-x86_64環境上執行的程式WindowsVSCode編譯Linux
- Jtti:怎麼在Linux系統裡執行虛擬機器JttiLinux虛擬機
- Mac os系統都有哪些優勢Mac
- linux系統中怎麼中執行jar包?linux系統中執行jar包的方法LinuxJAR
- Docker容器執行時許可權和Linux系統功能DockerLinux
- Linux如何檢視系統和程式的執行狀態?Linux
- Mac OS X 清除DNS快取MacDNS快取
- ubuntu系統 執行 .net core8 webapiUbuntuWebAPI
- Docker 教程:在 Mac M2 上執行 PostgreSQLDockerMacSQL
- dotnet 測試在 Linux 系統上的 Environment.GetFolderPath 行為Linux
- 無需sudo使用Podman在Linux上執行容器Linux
- 在Linux中,系統預設的執行級別是什麼?Linux
- Python 執行 Linux 作業系統命令PythonLinux作業系統
- 在netty3.x中存在兩種執行緒:boss執行緒和worker執行緒。Netty執行緒
- Mac os系統的優點在哪裡?Mac
- 如何弄清 Linux 系統執行何種系統管理程式Linux
- Linux系統透過CrossOver執行windows系統exe程式LinuxROSWindows
- windows、mac os、linux,三大系統之間有什麼區別?WindowsMacLinux
- 組合語言 - 在Mac上執行 DEBUG.exe組合語言Mac
- 在Mac上執行Rainbond,10分鐘快速安裝MacAI
- 在M1晶片的Mac系統上做.net core開發靠譜嗎?晶片Mac