当前位置: 移动技术网 > IT编程>开发语言>.net > .Net Core2.2升级到3.1小记

.Net Core2.2升级到3.1小记

2019年12月20日  | 移动技术网IT编程  | 我要评论

澳门现金网,揉胸除灵师,冰焦糖玛奇朵

.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();
}

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网