专栏首页Ken的杂谈Ken的杂谈从ASP.NET Core 2.1迁移到3.1

Ken的杂谈从ASP.NET Core 2.1迁移到3.1

一、前言

Ken的杂谈从2017年就开始采用 .NET Core作为开发框架,当时用的还是 .NET Core 2.0。 随后,.NET Core 2.1(LTS) 在2018年发布,Ken的杂谈又紧跟版本升级到 .NET Core 2.1 后面.NET Core3.0发布,但不是LTS版本,再加上我又懒,所以就干脆等到 .NET Core 3.1(LTS)正式发布,才来升级。毕竟这也是 .NET Core的最后一个主版本,下一个版本就是大一统的 .NET 5了。

由于跨了3个版本,会出现跟官方的迁移文章不一样的情况,所以也简单记录一下

二、升级过程

1、修改Project目标框架

修改 .csproj文件,把目标框架从netcoreapp2.1修改为netcoreapp3.1

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <PropertyGroup>
        <!--<TargetFramework>netcoreapp2.1</TargetFramework>-->
        <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>
  </PropertyGroup>

</Project>

2、升级依赖的NuGet包

将项目依赖的所有NuGet包更新至最新版本

update-package <package_name>

当然,你可以用IDE提供的界面进行操作,更加便捷

3、修改MVC注册方式

ASP.NET Core 3.0以后,提供了新的MVC服务注册方式,更加灵活

  • ASP.NET Core 2.x
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}
  • ASP.NET Core 3.x
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
}

如果你用的Razor Pages

那就是:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
}

4、修改路由启动方式

ASP.NET Core 3.0 中推荐使用端点路由(Endpoint Routing) 端点路由是 ASP.NET Core 2.2 引入,到3.1已经成熟稳定了。 引入端点路由主要是为了为不同的服务统一提供路由功能,例如:MVC,Razor Pages,Blazor,Signal

  • ASP.NET Core 2.1 路由启动
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...
    app.UseStaticFiles();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}"
        );
    });
}
  • ASP.NET Core 3.1 路由启动
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });

}

5、UrlHelper创建方式兼容

由于 ASP.NET Core 2.2 之后,启动路由有两种方式,如果直接使用 new UrlHelper()的方式会出现Exception,需要修改为通过UrlHelperFactory来构建。

//    var url = new UrlHelper
//        (
//        new ActionContext
//            (
//            ViewContext.HttpContext,
//            ViewContext.RouteData,
//            ViewContext.ActionDescriptor
//            )
//        );
var url = new UrlHelperFactory().GetUrlHelper
    (
        new ActionContext
            (
            ViewContext.HttpContext,
            ViewContext.RouteData,
            ViewContext.ActionDescriptor
            )
    );

三、备注

1、其他可能会碰到的问题

做完以上修改,建议关闭解决方案,然后删除IDE的项目配置目录,例如: .vs,.vscode,.idea ,然后重启项目。

不然项目的编译上可能会碰到问题。

另外,项目发布到文件夹时,也建议保证目标文件夹为空,不然发布时也有可能碰到问题:

Microsoft.NET.Sdk.Publish.TransformFiles.targets(50,5): error MSB4018: The “TransformWebConfig” task failed unexpectedly. System.Exception: In process hosting is not supported for AspNetCoreModule. Change the AspNetCoreModule to at least AspNetCoreModuleV2.

这个问题是发布时,IDE错误的将要发布的Project识别为 ASP.NET Core 2.x的项目。只要保证发布的目标文件夹为空即可。

2、附录

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 博客从ASP.NET 迁移到了ASP.NET Core 2.0

    在迁移之前,本站点是基于 ASP.NET MVC 4构建且部署在Linux+Mono环境下,Web服务器使用的是Jexus,在 .NET Core出来之前,这是...

    KenTalk
  • .NET Core快速入门教程 1、开篇:说说.NET Core的那些事儿

    聊 .NET Core,就不得不说他的爸爸 .NET。 当年Java刚刚兴起,如火如荼,微软也非常推崇Java,当时Windows平台的Java虚拟机就是微软按...

    KenTalk
  • Ubuntu下安装部署.NET Core多版本环境

    当我们需要 .NET Core 2.0,.NET Core 2.1或者其他版本共存的时候,︿( ̄︶ ̄)︿

    KenTalk
  • 每周.NET前沿技术文章摘要(2017-05-17)

    汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容,本期包含性能分析这一主题内容

    张善友
  • 每周.NET前沿技术文章摘要(2017-05-17)

    汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容: .NET .NET Framework 4.7正式发布 链接: http://www....

    张善友
  • 11年微软MVP:每周.NET前沿技术文章摘要(2017-05-10)

    汇总国内外.NET社区相关文章,覆盖.NET ,ASP.NET两个方面的内容

    张善友
  • 每周.NET前沿技术文章摘要(2017-05-24)

    汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容。

    张善友
  • Mono 和 .NET Core比翼双飞

    大家好,今天给大家分享.NET 蓝图之下的Mono和.NET Core 话题,微软在Build 2019 大会上给.NET 做了一个五年规划,所以分享的主题就是...

    张善友
  • 每周.NET前沿技术文章摘要(2017-05-24)

    汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容: .NET Free eBook/Guide on ‘.NET Microservice...

    张善友
  • .NET 开发者 开始学习ASP.NET Core 2吧!

    对于任何形式的新项目(产品)的开发,ASP.NET Core 绝对是首选,.NET Core 2.0的API已经和.NET Framework 4.6.2对齐,...

    张善友

扫码关注云+社区

领取腾讯云代金券