欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.Net Core2.2升级到3.1小记

程序员文章站 2024-02-07 20:43:40
.NET Core 3.1 作为LTS长期支持版本,会提供3年的支持(明年就出.net5),值得升级(吗)。 目前主流的第三方包大多都已经提供了支持,2.x => 3.1还是变化不是特别多,EF Core坑就大咯,谨慎。 ASP.NET Core 3.1 的新增功能 https://docs.mic ......

.net core 3.1 作为lts长期支持版本,会提供3年的支持(明年就出.net5),值得升级(吗)。

目前主流的第三方包大多都已经提供了支持,2.x => 3.1还是变化不是特别多,ef core坑就大咯,谨慎。

 

asp.net core 3.1 的新增功能

ef core 3.0重大改变

 

1,将vs2019更新到16.4.x,会自动安装3.1的sdk。

 

2,将项目目标框架升级到3.1,右键项目 - 属性 - 目标框架,或者修改csproj文件。

  <propertygroup>
    <targetframework>netcoreapp3.1</targetframework>
  </propertygroup>

 

3,web项目中program.cs文件,webhost 改为 host

public class program
{
    public static void main(string[] args)
    {
        createhostbuilder(args).build().run();
    }

    public static ihostbuilder createhostbuilder(string[] args) =>
        host.createdefaultbuilder(args)
            .configurewebhostdefaults(webbuilder =>
            {
                webbuilder.usestartup<startup>();
            });
}

 

4,web项目中startup.cs

configureservices 方法中 services.addmvc() 改为 services.addcontrollerswithviews()

//services.addmvc().setcompatibilityversion(compatibilityversion.version_2_2);
services.addcontrollerswithviews();

configure 方法中 app.usemvc() 改为 app.userouting() 与 app.useendpoints()

public void configure(iapplicationbuilder app, iwebhostenvironment env)
{
    if (env.isdevelopment())
    {
        app.usedeveloperexceptionpage();
    }
    else
    {
        app.useexceptionhandler("/home/error");
    }
    app.usestaticfiles();
    app.useauthorization();

    app.userouting();
    app.useendpoints(endpoints =>
    {
        endpoints.mapcontrollerroute(
            name: "default",
            pattern: "{controller=home}/{action=index}/{id?}");
    });
}

 

5,更新所有(相关)nuget包到最新

 

6,重新生成解决方案,报错 the project .... must provide a value for configuration.

从 web 项目中移除 microsoft.aspnetcore... 的 packagereference,因为已经包含在3.1的目标框架内了。

<packagereference include="microsoft.aspnetcore.app" />
<packagereference include="microsoft.aspnetcore.razor.design" version="2.2.0" privateassets="all" />

 

大功告成,至少编译通过了,运行中目前只碰到一个坑。

a tracking query projects owned entity without corresponding owner in result.owned entities cannot be tracked without their owner. either include the owner entity in the result or make query non-tracking using asnotracking().

automapper的projectto<>导致,暂时加了个asnotracking()解决问题,根据报错信息来看还有另一种解决方案。

public ienumerable<userdto> getall()
{
    return _userrepository.getall(tracking: false)
        .orderbydescending(s => s.id)
        .projectto<userdto>(_mapper.configurationprovider)
        .asenumerable();
}