.NetCore2.1升級到3.1記錄

.NetCore 項目從2.1升級到3.1過程中的實戰,簡單整理記錄下

1.TargetFramework 升級

這步比較簡單,站點,類庫修改下版本。

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

2.替換掉舊的屬性

2.13.1
IHostingEnvironmentIWebHostEnvironment
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)
  {
     
  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章