专栏首页dotNET知音.NetCore2.1升级到3.1记录

.NetCore2.1升级到3.1记录

.NetCore 项目从2.1升级到3.1过程中的实战,简单整理记录下

1.TargetFramework 升级

这步比较简单,站点,类库修改下版本。

 <TargetFramework>netcoreapp2.1</TargetFramework>
 由原来的2.1-》3.1

2.替换掉旧的属性

2.1

3.1

IHostingEnvironment

IWebHostEnvironment

services.AddMvc()

services.AddControllersWithViews()

等等....

3.不生成 *.Views.dll 处理

.NET core 默认会把.Cshtml文件生成对应的dll,如果只修改页面信息,还需要重新编译,不太方便!以下方式发布,可以在发布的时候不生成*.Views.dll 

2.1方式
- 编辑项目.csproj 新增<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish> 如下

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
  </PropertyGroup>

3.1方式
- 安装包: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
- 更新项目的 Startup.ConfigureServices 方法 添加 mvcBuilder.AddRazorRuntimeCompilation();
- 编辑项目.csproj 新增   <RazorCompileOnPublish>false</RazorCompileOnPublish> 如下

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RazorCompileOnPublish>false</RazorCompileOnPublish>
  </PropertyGroup>


4.NetCore 类库引用问题

我原来的.NetCore类库升级之后结果发生错误 如图

按照以往的经验,报错按照提示解决就是了

以为缺少对应的包,然后去nuget安装时发现 最新版本是2.2 ,跟.NETcore web 项目引用的版本不一样。

查看了官网说明之后,知道问题所在。

  • 面向 Microsoft.NET.Sdk.Web SDK 的项目隐式引用 Microsoft.AspNetCore.App 框架。
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
    ...
</Project>
  • 面向 Microsoft.NET.Sdk 或 Microsoft.NET.Sdk.Razor SDK 的项目 如果需要,只能手工添加Microsoft.AspNetCore.App
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>
    ...
</Project>

到此.NetCore 类库,可以正确的使用Microsoft.AspNetCore.App。那这两个共享框架的区别在哪里呢?

框架名称

描述

Microsoft.NETCore.App

基本运行时. 它支持 System.Object, List<T>, string, memory management(内存管理), file(文件) and network IO(网络io), threading(线程), etc.

Microsoft.AspNetCore.App

默认的Web运行时. 他导入 Microsoft.NETCore.App, 并添加api以使用Kestrel创建HTTP server, Mvc, SignalR, Razor, and EF Core 部分

5.NETcore3.1 集成Autofac方式变动

  • 在创建主机时添加AutofacServiceProviderFactory
  public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

  • 在startup.cs添加ConfigureContainer方法,然后可以使用ContainerBuilder用来访问autofac容器,并注入。
  public void ConfigureContainer(ContainerBuilder builder)
  {
     
  }

本文分享自微信公众号 - dotNET知音(AAshiyou),作者:李明成

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-31

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何运用领域驱动设计 - 聚合

    出处:https://www.cnblogs.com/uoyo/p/12061334.html

    李明成
  • 分享一个基于Net Core 3.1开发的模块化的项目

    框架如何去加载所写的模块这是最核心的问题之一,好在Asp.Net Core MVC为模块化提供了一个部件管理类

    李明成
  • 一文了解Nuget的使用

    官网定义:NuGet是.NET的软件包管理器(免费)。NuGet客户端工具提供了生成和使用软件包的能力。NuGet Gallery 是所有软件包作者和消费者都使...

    李明成
  • Django rest framework源码分析(2)----权限

    添加权限 (1)API/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 # utils/permi...

    zhang_derek
  • 世界顶级科技公司,被称“上海3大养老院”,程序员从来不加班

    程序员,一个被黑的最多的行业,很多人印象中的程序员爱键盘胜过爱女朋友、头发越少技术越高、头发凌乱胡子拉碴、月薪3万穿的却像年薪300,凌晨还在公司敲着代...

    xcbeyond
  • SpringBoot2.x系列教程(三十八)SpringBoot配置Https访问

    Https在网站中的使用不断的在普及,它不仅能够增加网站的安全性,甚至连搜索引擎都会对支持Https的网站进行区别对待。

    用户1161110
  • react 在使用数据请求的时候和setState的时候哪个先处理

    杭州前端工程师
  • Intellij如何设置编译后自动重新加载class文件?

    前段时间突然发现Intellij不能自动重新加载类了,每次编译后都要重新启动项目,才能显示更新效果,后来网上查询Intellij下如何配置热部署,都...

    程序员一一涤生
  • 基尼不纯度

    用户1733462
  • SpringBoot 看似复杂的Environment,其实很简单

    喜欢写代码,讨厌配环境 我相信这十个字的小标题代表了大多数码农的心声。 十年前读大学时,学校开设了C语言还有C++。但是学习这两种语言,对于新手来说非常没...

    Java3y

扫码关注云+社区

领取腾讯云代金券