前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ken的杂谈从ASP.NET Core 2.1迁移到3.1

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

作者头像
KenTalk
发布2020-01-20 16:43:31
1.4K0
发布2020-01-20 16:43:31
举报
文章被收录于专栏:Ken的杂谈Ken的杂谈

一、前言

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

代码语言:javascript
复制
<Project Sdk="Microsoft.NET.Sdk.Web">

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

</Project>

2、升级依赖的NuGet包

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

代码语言:javascript
复制
update-package <package_name>

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

3、修改MVC注册方式

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

  • ASP.NET Core 2.x
代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}
  • ASP.NET Core 3.x
代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
}

如果你用的Razor Pages

那就是:

代码语言:javascript
复制
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 路由启动
代码语言:javascript
复制
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 路由启动
代码语言:javascript
复制
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来构建。

代码语言:javascript
复制
//    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、附录

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、升级过程
    • 1、修改Project目标框架
      • 2、升级依赖的NuGet包
        • 3、修改MVC注册方式
          • 4、修改路由启动方式
            • 5、UrlHelper创建方式兼容
            • 三、备注
              • 1、其他可能会碰到的问题
                • 2、附录
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档