upgrade asp.net core mvc 7 to dotnet8

官方升级文档:

https://learn.microsoft.com/en-us/aspnet/core/migration/70-80?view=aspnetcore-8.0&tabs=visual-studio

8.0中全是关于Blazor的改动,MVC部分已经很稳定了,没有breaking changes,完全没有需要改的地方。

升级dotnet sdk版本

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

升级PackageReference版本

运行以下命令查看依赖的最新版本

dotnet list package --outdated

Microsoft家都需要升级到8.x

<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="8.0.0" />

手动修改.csproj里面的Version

Dockerfile

修改base image

FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine

为了容器运行在non-root权限下,有添加一个UID为1000的"app"用户。

RUN addgroup -g 1000 app && adduser -u 1000 -G app -D app
USER app

换到8.0的base image以后会报错,因为在base image默认添加UID为1654的"app"用户。

dotnet-docker github项目

aspnet:8.0-alpine Dockerfile源文件

直接使用USER $APP_UID也不行,挂载的volumes会有权限问题。
最后解决方案是在docker-compose添加user: "1000:1000"让容器以UID 1000运行。

services:
  app:
    image: myimage
    volumes:
      - ./dbs:/dbs
    user: "1000:1000"