在 Fedora Linux 上使用 .NET 7

.NET 7 現在可在 Fedora linux 上使用 本文簡要介紹了 .NET 是什麼、它最近的一些令人興奮的功能、如何安裝它,並提供了一些示例來說明如何使用它。

.NET 7

.NET 是用於構建跨平台應用程序的平台。 它允許您使用 C#、F# 或 VB.NET 編寫代碼。 您可以輕鬆地在一個平台上開發應用程序,並在另一個平台或架構上部署和運行它們。

特別是,您可以在 Windows 上開發應用程序,然後在 Fedora Linux 上運行它們! 如果你想從專有平台遷移到 Fedora linux,這就少了一個障礙。也可以在 Fedora 上開發並部署在 Windows 上。 請注意,在後一種情況下,某些類型的特定於 Windows 的應用程序(例如 Windows GUI 應用程序)不可用。

.NET 7 包括幾個令人興奮的新功能。 它包括對 .NET 運行時和庫的許多性能改進、用於處理 Unix 文件權限和 tar 文件的更好的 API、通過 OpenTelemetry 更好地支持可觀察性以及提前構建應用程序。 有關 .NET 7 中所有新功能的更多詳細信息,請參閱https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-7.

Fedora Linux 構建的 .NET 7 甚至可以在 IBM Power 架構 (ppc64le) 上運行。 這是對 64 位 ARM/Aarch64(Fedora Linux 稱為 aarch64,.NET 稱為 arm64)、IBM Z (s390x) 和 64 位 Intel/AMD 平台(Fedora Linux 稱為 x86_64,.NET 稱為x64).

.NET 7 是一個標準期限支持 (STS) 版本,這意味著上游將在 2024 年 5 月停止支持它。Fedora Linux 上的 .NET 將遵循該結束日期。 如果您想使用長期支持 (LTS) 版本,請改用 .NET 6。 .NET 6 將於 2024 年 11 月停產。有關 .NET 生命週期的更多詳細信息,請參閱https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core.

如果您希望為在 Fedora Linux 上開發 .NET 應用程序設置開發環境,請查看 https://fedoramagazine.org/set-up-a-net-development-environment/。

.NET 特別興趣小組 (DotNetSIG)在 Fedora Linux 上維護 .NET 來加入我們改進 Fedora Linux 上的 .NET! 您可以通過 IRC (#fedora-開發) 或郵件列表 ([email protected]) 如果您有意見、問題、想法或建議。

如何安裝.NET 7

要在 Fedora Linux 上編譯 C#、F# 或 VB.NET 代碼,您需要 .NET SDK。 如果您只想運行現有的應用程序,您只需要 .NET 運行時。

使用以下命令安裝 .NET 7 軟件開發工具包 (SDK):

                      sudo dnf install -y dotnet-sdk-7.0
                    

這將安裝所有依賴項,包括 .NET 運行時。

如果不想安裝整個 SKD 而只想運行 .NET 7 應用程序,則可以使用以下命令之一安裝 ASP.NET Core 運行時或 .NET 運行時:

                      sudo dnf install -y aspnetcore-runtime-7.0
sudo dnf install -y dotnet-runtime-7.0
                    

這種包名風格適用於所有版本的 Fedora linux 上的所有版本的 .NET 例如,您可以使用相同的包名風格安裝 .NET 6:

                      sudo dnf install -y dotnet-sdk-6.0
                    

為確保安裝了 .NET 7,請運行 dotnet –info 以查看所有已安裝的 SDK 和運行時。

許可證和遙測

Fedora Linux 中的 .NET 包是從完全開放的源代碼構建的。 主要許可證是麻省理工學院。 Fedora Linux 中的 .NET 包不包含任何封閉源代碼或專有軟件。 Fedora .NET 團隊在 Fedora Linux 構建系統上離線構建 .NET,並在構建 .NET 之前刪除源代碼存儲庫中存在的所有二進製文件。 這使我們高度相信 .NET 是從同行評審的來源構建的。

Fedora Linux 上的 .NET 包不收集任何用戶數據。 Fedora .NET 構建中禁用所有遙測。 不會從任何運行 .NET 的人那裡收集任何數據,也不會向 Microsoft 發送任何數據。 我們運行測試來驗證 Fedora linux 上的每個 .NET 構建

.NET 中的“Hello World”

安裝 .NET 7 後,您可以使用它來構建和運行應用程序。 例如,您可以使用以下步驟創建並運行經典的“Hello World”應用程序。

使用 C# 語言創建一個新的 .NET 7 項目:

                      dotnet new console -o HelloWorldConsole
                    

這將創建一個名為 HelloWorldConsole 的新目錄,並創建一個打印出 hello world 的 C# Hello World trivial。

然後切換到項目目錄:

                      cd HelloWorldConsole
                    

最後,編譯並運行您的應用程序:

                      dotnet run
                    

.NET 7 將構建您的程序並運行它。 您應該從程序中看到“Hello World”輸出。

.NET 中的“Hello Web”

您還可以使用 .NET 構建 Web 應用程序。 讓我們現在就這樣做。

首先,在單獨的目錄(不是我們的舊項目)中創建一個新的 Web 項目:

                      dotnet new web -o HelloWorldWeb
                    

這將基於 .NET 嵌入式 Web 模板(空 ASP.NET Core)創建一個簡單的 Hello-World 風格的應用程序。

現在,切換到該目錄:

                      cd HelloWorldWeb
                    

最後,編譯並運行應用程序:

                      dotnet run
                    

您應該會看到如下所示的輸出,表明 Web 應用程序正在運行。

                      Building…
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:5105
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /home/omajid/temp/HelloWorldWeb
                    

請使用網絡瀏覽器訪問該應用程序。 您可以在“Now listening on:”行的輸出中找到 URL。 在我的例子中是 https://localhost:5105:

                      firefox https://localhost:5105
                    

您應該會在瀏覽器中看到一條“Hello World”消息。

將 .NET 與容器一起使用

至此,您已在本地成功創建、編譯和運行 .NET 應用程序。 如果您想隔離您的應用程序以及與之相關的所有內容怎麼辦? 如果想在非Fedora操作系統環境下運行怎麼辦? 或者將其部署在公共/私有/混合雲中? 你可以使用容器! 讓我們構建一個容器映像來運行您的 .NET 程序並對其進行測試。

首先,創建一個新項目:

                      dotnet new web -o HelloContainer
                    

然後切換到該項目目錄:

                      cd HelloContainer
                    

然後添加一個描述如何為我們的應用程序構建容器的 Dockerfile。

                      FROM fedora:37
                      
RUN dnf install -y dotnet-sdk-7.0 && dnf clean all
RUN mkdir /HelloContainer/
WORKDIR /HelloContainer/
COPY . /HelloContainer/
RUN dotnet publish -c Release
ENV ASPNETCORE_URLS="https://0.0.0.0:8080"
CMD ["dotnet" , "bin/Release/net7.0/publish/HelloContainer.dll"]

這將從默認的 Fedora Linux 容器開始,在其上安裝 .NET 7,複製其源代碼,並使用容器中的 .NET 構建應用程序。 最後,您將進行設置,以便運行容器時將運行您的應用程序並通過端口 8080 公開它。

您可以直接構建和運行此容器。 但是,如果您熟悉 Dockerfiles,您可能已經註意到它的效率非常低。 它將重新下載所有依賴項並根據對任何源文件的任何更改重建所有內容。 最後生成一個大型容器映像,甚至包含完整的 .NET SDK。 一種選擇是使用多階段構建來加速源代碼的迭代。 您還可以在最後生成一個較小的包裝器,它只包含您的應用程序和 .NET 依賴項。

用這個覆蓋 Dockerfile:

                      FROM registry.fedoraproject.org/fedora:37 as dotnet-sdk
RUN dnf install -y dotnet-sdk-7.0 && dnf clean all

FROM registry.fedoraproject.org/fedora:37 as aspnetcore-runtime
RUN dnf install -y aspnetcore-runtime-7.0 && dnf clean all

FROM dotnet-sdk as build-env
RUN mkdir /src
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /publish

FROM aspnetcore-runtime as app
WORKDIR /publish
COPY --from=build-env /publish .
ENV ASPNETCORE_URLS="https://0.0.0.0:8080"
EXPOSE 8080
ENTRYPOINT ["dotnet", "HelloContainer.dll"]
                    

現在安裝 podman,以便您可以構建和運行 Dockerfile:

                      sudo dnf install -y podman
                    

創建容器鏡像:

                      podman build -t hello-container .
                    

現在運行我們剛剛創建的容器:

                      podman run -it -p 8080:8080 hello-container
                    

關於參數的註釋。 該端口配置有 -p 標誌,以便容器內的端口 8080 也可用作外部的端口 8080。 這使您可以直接連接到應用程序。 包裝器以交互方式運行 (-it),因此您可以看到輸出和出現的任何錯誤。 將應用程序部署到生產環境時,通常不需要交互式執行。

最後,使用網絡瀏覽器連接到容器。 例如:

                      firefox https://localhost:8080
                    

您應該會看到一條“Hello world”消息。

恭喜! 您現在有一個在 Fedora 容器中運行的 .NET 應用程序!

結論

這是對 Fedora Linux 上的 .NET 7 的快速概述,涵蓋了使用 Fedora RPM 包構建和運行應用程序,以及僅使用 Fedora linux 為 .NET 應用程序構建應用程序。

如果您有興趣在 Fedora Linux 上使用或改進 .NET,請加入我們!

相關文章