分享程式代碼相關筆記
目前文章總數:203 篇
最後更新:2025年 10月 25日
進入官方的.Net 下載首頁,可以看到最新發行日期
問題1:我們怎麼知道自己 開發的專案 .NET 主版本與當前使用的是哪個版本號呢?
問題2:怎麼查閱官方的更新內容
開啟專案 -> 滑鼠右鍵選擇自己的專案 -> 滑鼠左鍵點擊屬性
可以觀察到 目標Framework 的值為 .NET 8.0
對比官方的.Net 下載首頁,可以知道此專案主版本號為 .NET 8.0
無論 windows , Linux 可以在執行 dotnet 運行的機器上輸入以下指令
dotnet --info
可取得該機器當前運行 dotnet 指令時,使用的 runtime
※以此例該機器為 .NET 8.0.10
以 .NET 8.0.10 範例來說,有以下定義
主版本號.次版本號.修補版本號
| 項目 | 值 | 說明 |
|---|---|---|
| 主版本號 | 8 | 代表主要版本,通常對應一個長期支援 (LTS) 或標準支援 (STS) 的重大更新。 |
| 次版本號 | 0 | 表示 功能階段 或 大方向維持不變 的版本; .NET 中通常固定為 0,代表這是該主版本下的基礎系列(例如 8.0.x)。 |
| 修補版本號 | 10 | 代表 累積修補 (Patch) 或 安全性更新 的版本次數,因此 8.0.10 表示 8 版修補了 10 次 |
進入官方的英文.Net 下載首頁,點擊黑框處
以 .NET 8.0 舉例,選擇 All .NET 8.0 downloads
選擇 Release Notes
.NET 8.0 SDK 對應的 .NET Runtime 有 8.0.415 / 8.0.318 / 8.0.121 ,但我們目的是知道最新的更新內容為何
繼續往下拉到 Notable Changes ,會列出最新版本的更新內容,有三個項目
CVE-2025-55248
CVE-2025-55315
CVE-2025-55247
點擊 CVE-2025-55248 會跳轉到 CVE 的報告內容,可以知道 Microsoft 修正了的內容、嚴重性為何
以此架構為例
| 1. Jenkins(CI) | 建立 Docker Container 的 Image 依照自己的 Web App 的 Dokcerfile 生成 |
| 2. Deploy(CD) | 將 Image 上傳到遠端伺服器 |
| 3. 遠端機器運行(CD) | 容器化運行 Web 應用程式(App) |
以此架構為例,使用的 .NET runitme 會在 Jenkins Server 上,生成 Image 時會決定使用的版本
| 1. Jenkins(CI) | 建立 Docker Container 的 Image 依照自己的 Web App 的 Dokcerfile 生成 |
| 2. Deploy(CD) | 將 Image 上傳到遠端伺服器 |
| 3. 遠端機器運行(CD) | 容器化運行 Web 應用程式(App) |
容器化的部署中,Jenkins 扮演 CI 角色,能定義容器化的使用過程在 DockerFile 中
以此腳本為例 aspnet:8.0 會基於 .NET 8.0 主版本,然後自動找出合適的 .NET runtime,依此資料來看 2025/10/14 的 8.0.21 是當前最新版本
通常修訂號會讓其 自動 抓最新,因為都是修復主版本號的問題,多半與 安全性、漏洞 相關的問題,建議自動更新
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
ENV ASPNETCORE_ENVIRONMENT=Development
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
COPY ./publish .
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
ENTRYPOINT ["dotnet", "YourWebApplication.dll"]
若要指定特別版本號,可以將第一行替換成以下,貼上固定的 Patch 修訂號 (21)
FROM mcr.microsoft.com/dotnet/aspnet:8.0.21 AS base
補充評估方式:
※是否自動更新還需考量來源的更新頻率、是否穩定。EX: Beta 版本建議用 **固定** 而非 **浮動**,因為主版本都尚未穩定,會很頻繁更新
※從而導致當前可相依版本異常
我們在調整完畢 DockerFile 後,在進行 CICD 部署,最終只需確認 Container 上使用的 .NET 版本為何
因此要遠端登入 CD 的機器
登入容器運行的機器,輸入以下
docker exec -it 您的容器名稱 bash
輸入以下檢視 .NET 安裝的內容
docker --info
可以獲得以下的資訊,其中最關鍵的是版號資訊 => 8.0.21
.NET runtimes installed:
Microsoft.AspNetCore.App 8.0.21 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 8.0.21 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
可以確定我們容器化的 Web 應用程式使用的版本號為何
在此 DockerFile 腳本中,會抓取 aspnet:8.0 的映像檔案當 Base
有可能遇到為何 使用到舊的版本 以此 DockerFile 為例應為 8.0.21(自動抓取),但是自動化部署永遠都是固定版本 (EX: 8.0.7 等等)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
ENV ASPNETCORE_ENVIRONMENT=Development
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
COPY ./publish .
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
ENTRYPOINT ["dotnet", "YourWebApplication.dll"]
輸入以下指令,檢查 DockerFile 中使用的 Image
docker images
以此範例為使用
docker images |grep mcr.microsoft.com/dotnet/aspnet
我們可以觀察到有可能第一次抓取 aspnet 映像檔案在很久以前,因此版本每次更新時都會使用此版本,不會重抓
因此遇到此狀況,可以手動刪除映像檔,如下指令:
docker image rm mcr.microsoft.com/dotnet/aspnet:8.0
再次進行 CICD 自動化建置就能 自動 使用最新版本的 .NET runtime