在 WSL Ubuntu 上使用 .NET 進行跨平臺開發新手入門

技術譯民發表於2020-12-29

翻譯自 haydenb 2020年6月3日的文章《Getting started with cross-platform development using .NET on Ubuntu on WSL》 [1]

.NET 是一個開源軟體框架,用於在 Linux、Windows 和 macOS 上構建跨平臺應用程式。WSL 上的 Ubuntu [2]允許您同時為 Ubuntu 和 Windows 構建和測試應用程式。當我們把這些融合在一起時會發生什麼呢?這篇部落格將演示如何在 WSL 上安裝 .NET 開發棧,並構建一個簡單的作業系統感知應用,然後在 Linux 和 Windows 上測試它。

啟用 WSL 1

以管理員方式啟動 PowerShell 並執行:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Enable WSL 1

如果您只想安裝 WSL 1,您可以重啟電腦並跳過下一步。

Restart-Computer

如果您要安裝 WSL 2,請不要重啟,繼續下一步操作:

啟用 WSL 2 (Windows 10 2004+)

想要了解更多關於 Ubuntu on WSL 2 的細節,請檢視 “Ubuntu on WSL 2 Is Generally Available[3]

以管理員方式啟動 PowerShell 並執行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Enable WSL 2

然後重啟 Windows 作業系統:

Restart-Computer

在 WSL 上安裝 Ubuntu

從 Microsoft Store 中下載 Ubuntu:

Ubuntu 20.04 LTS on the Microsoft Store [4]

Ubuntu 20.04 LTS on the Microsoft Store

想要了解更多在 WSL 上安裝 Ubuntu 的方法,請檢視 Ubuntu on WSL wiki 頁面 [5]

安裝 Windows Terminal

從 Microsoft Store 中下載 Windows Terminal:

Windows Terminal on the Microsoft Store [6]

Windows Terminal on the Microsoft Store

也可以從 GitHub 下載 Windows Terminal。

執行 WSL 上的 Ubuntu

開啟 Windows Terminal 並執行:

ubuntu.exe

當您首次在 WSL 上執行 Ubuntu 時,它將安裝,並提示您建立一個 Linux 使用者,這個使用者是獨立於 Windows 使用者的。

Run Ubuntu on WSL

退出並重新開啟 Windows Terminal,您將會發現 Ubuntu 出現在下拉選單中:

Ubuntu on the drop-down

您可以在 settings.json 中設定 Windows Terminal,將 Ubuntu 設定為預設項。

更新 WSL 上的 Ubuntu

您應該定期檢查更新,並在 WSL 上的 Ubuntu 中執行升級。我們用 apt (Ubuntu 包管理器)來實現。

要檢查更新,請執行:

sudo apt update

sudo apt update

要獲得升級,請執行:

sudo apt upgrade

sudo apt upgrade

您可以通過用 && 將它們連線在同一行並新增 -y 標籤,自動更新並應用可用的升級:

sudo apt update && sudo apt upgrade -y

新增微軟的 .NET 資源庫和簽名金鑰

我們需要為 apt 新增微軟的 .NET 資源庫和簽名金鑰。我們將從微軟下載並安裝一個包來完成這項工作。

請確保您正在為您的 Ubuntu 版本安裝正確的資源庫。您可以使用下面的命令檢查 Ubuntu 的當前版本:

cat /etc/os-release

下面的示例使用 Ubuntu 20.04,來自 Canonical 的最新 LTS 發行版。如果您仍在使用 Ubuntu 16.04、18.04 或 19.10,您可以在微軟文件 [7]中找到相應的資源庫。想要了解更多關於 LTS 和中間版本之間的區別,我們有一個釋出週期頁面 [8]

為 20.04 版本下載微軟的資源庫和金鑰包:

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

Download the Microsoft repository and key package

使用 dpkg -i 手動安裝微軟資源包:

sudo dpkg -i packages-microsoft-prod.deb

Install the Microsoft repo package

現在當你更新 apt 時,你會看到微軟資源庫已檢查升級了:

apt update

安裝 .NET SDK

使用 apt 從微軟資源庫安裝 .NET 和相關依賴項:

sudo apt-get install dotnet-sdk-3.1 -y

Install the .NET SDK

新建工作區

建立一個新的工作目錄並開啟該目錄:

mkdir dotnetproject
cd dotnetproject/

Create a workspace

新建一個 .NET 專案

使用 dotnet new 建立一個新的 .NET 控制檯專案,這會建立一個名為 Program.cs 的檔案和其他一些必要的資料夾和檔案:

dotnet new console

Create a new .NET project

探索我們的 .NET 應用

列出您的新 .NET 專案中的檔案:

ls

檢視 Program.cs 的內容:

cat Program.cs

Explore our .NET app

執行示例程式:

dotnet run

Run the sample program

自定義我們的 .NET 應用

在您最喜歡的編輯器中開啟 Program.cs:vi、nano、emacs 或者有 remote WSL 擴充套件的 VS Code

Code with the remote WSL extension

在這裡,我們使用 WSL 上的 Ubuntu 中包含的 nano:

nano Program.cs

nano Program.cs

首先,我們新增 Interop services 名稱空間

using System.Runtime.InteropServices;

然後把:

Console.WriteLine("Hello World!");

替換成:

Console.WriteLine($"Hello {System.Environment.GetEnvironmentVariable("USER")}");

if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
  Console.WriteLine("We're on Linux!");
}

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
  Console.WriteLine("We're on Windows!");
}

Console.WriteLine("Version {0}", Environment.OSVersion.Version);

replace code

這段程式碼也可以在這裡 [9]找到。

這個應用程式告訴我們:當前的使用者,檢查是在 Windows 還是 Linux 上,然後給出 OS 核心版本。

退出並儲存,然後執行:

dotnet run

Exit and save and run

讓我們的 .NET 應用程式跨平臺

我們需要更新 .NET 專案檔案 dotnetproject.csproj,告訴 .NET 同時為 Linux 和 Windows 平臺構建。

在我們的編輯器中開啟 dotnetproject.csproj 並新增:

<PropertyGroup>
    <RuntimeIdentifiers>win10-x64;linux-x64</RuntimeIdentifiers>
</PropertyGroup>

這將引導 .NET 同時為 Windows 10 x64 和 Linux x64 構建自包含的二進位制檔案。

Make our .NET application cross-platform

構建我們的跨平臺應用程式

當我們配置好專案後,構建 .NET 應用程式變得如此簡單:

dotnet publish -r win10-x64
dotnet publish -r linux-x64

dotnet publish

可以在專案的 /bin/ 資料夾中找到每個平臺的自包含二進位制檔案及其所有必需的庫:

ls bin/Debug/netcoreapp3.1/

ls bin/Debug/netcoreapp3.1/

測試 Linux 版本

您可以直接執行 Linux 二進位制檔案,如下所示:

./bin/Debug/netcoreapp3.1/linux-x64/publish/dotnetproject

Test Linux build

測試 Windows 版本

要執行 Windows 版本,請將其複製到 Windows 檔案系統中:

cp -r ~/dotnetproject/bin/Debug/netcoreapp3.1/win10-x64/publish /mnt/c/Users/Hayden/OneDrive/Desktop/

譯者注:
此處的 /mnt/ 為 Ubuntu 系統中看到的 Windows 檔案系統的根目錄,/mnt/c/ 即為 Windows 系統中的 C 盤。

然後執行:

/mnt/c/Users/Hayden/OneDrive/Desktop/publish/dotnetproject.exe

Test Windows build

至此,我們已經為 Linux 和 Windows 構建並執行了相同的應用程式。我們可以使用 WSL 同時測試它們。


作者 : haydenb
譯者 : 技術譯民
出品 : 技術譯站
連結 : 英文原文


  1. https://ubuntu.com/blog/creating-cross-platform-applications-with-net-on-ubuntu-on-wsl Getting started with cross-platform development using .NET on Ubuntu on WSL ↩︎

  2. https://ubuntu.com/wsl Ubuntu on WSL ↩︎

  3. https://ubuntu.com/blog/ubuntu-on-wsl-2-is-generally-available Ubuntu on WSL 2 Is Generally Available ↩︎

  4. https://www.microsoft.com/store/productId/9N6SVWS3RX71 Ubuntu 20.04 LTS on the Microsoft Store ↩︎

  5. https://wiki.ubuntu.com/WSL Ubuntu on WSL wiki ↩︎

  6. https://www.microsoft.com/store/productId/9N0DX20HK701 Windows Terminal on the Microsoft Store ↩︎

  7. https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu ↩︎

  8. https://ubuntu.com/about/release-cycle ↩︎

  9. https://pastebin.ubuntu.com/p/swbPxXXSKD/ ↩︎

相關文章