Hello 大家好。本月圈子裏最大的事莫過於 .NET8 正式 release。羣友們都在適配 .NET8。抽個週末我也把 AgileConfig 升級到了 .NET8。下面把升級的過程簡單記錄一下,其中有個小坑,對大家升級的時候可能有所幫助。
升級
- 升級 .NET8
修改所有項目的目標框架爲 .NET8.0 - 升級 nuget 包
在 nuget 包管理器裏把所有能更新的包全部更新到最新。
有一個包Microsoft.AspNetCore.Http.Abstractions
提示已經棄用,需要處理一下。
因爲這個包現在微軟已經不在 nuget 上提供,需要使用框架引用。
修改項目文件,在 ItemGroup裏添加以下內容:
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
再次編譯,警告消息。
這個問題其實跟 .NET8 沒有關係,應該是我 3.1 升 6 的時候遺忘了。
- 修改 dockerfile
原來的 dockerfile 是基於 .NET6 鏡像的,需要修改爲 .NET8
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
....
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
....
把 6 改成 8,其他不用改,超級簡單。
通過以上操作,在本地運行沒有問題,打包成鏡像後在本地 docker desktop 環境下跑也沒問題。但是發佈到服務器上用鏡像跑缺報錯:Failed to create CoreCLR, HRESULT: 0x80070008
警告排查是由於低版本的 docker engine 與某些 ubuntu 的鏡像不兼容,需要在 docker run 的時候添加參數。
--security-opt seccomp=unconfined
或者在 docker-compose.yml 上添加參數:
security_opt:
- seccomp=unconfined
添加以上參數後一切正常了。
參考:https://docs.linuxserver.io/FAQ/#symptoms
總結
本次升級可以說相當簡單。得益於 .NET 接口的穩定,升級框架幾乎不用動任何一行自己的代碼。只是最新的 .aspnet8 runtime 的鏡像對低版本的 docker engine 兼容性有點問題,使用 docker 跑的同學需要注意一下。
最後
✨✨✨Github地址:https://github.com/dotnetcore/AgileConfig 開源不易,歡迎star✨✨✨
✨✨✨Gitee地址:https://gitee.com/kklldog/AgileConfig ✨✨✨
演示地址:http://agileconfig_server.xbaby.xyz/ 超級管理員賬號:admin 密碼:123456