纸壳CMS升级.Net Core 3.0遇到的问题和变化
ZKEASOFT July 30, 2019
.Net Core 3.0很快就要出正式版了,纸壳CMS也在第一时间进行了更新升级,在升级的过程中也遇到了一些问题在这里和大家分享一下。
项目文件变化
最大的变化应该是Asp.NetCore在3.0中作为将框架,引用时也将作为框架进行引用。
之前是单个的包引用,像这样:
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
......
3.0将作为框架进行引用:
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App"></FrameworkReference>
</ItemGroup>
因此,TargetFramework
也产生了变化,原先是netstandard2.0
现在要变成netcoreapp3.0
<TargetFramework>netcoreapp3.0</TargetFramework>
在开始升级的时候,并不知道这样的变化,然后还在GitHub上进行了提问:
https://github.com/aspnet/AspNetCore/issues/10726
IWebHostBuilder
IWebHostBuilder
变更为IHostBuilder
,使用Host来创建WebHost:
namespace ZKEACMS.WebHost
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateWebHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
});
});
}
}
IHostingEnvironment
IHostingEnvironment
变更为IWebHostEnvironment
Endpoints路由注册变化
使用新的方法进行Endpoints路由的注册:
applicationBuilder.UseRouting();
applicationBuilder.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute()
endpoints.MapRazorPages();
});
Razor动态编译
.Net Core 3.0的Razor的动态编译需要通过添加Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
包引用来开启:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" />
</ItemGroup>
然后通过调用AddRazorRuntimeCompilation
方法来启用:
services
.AddControllersWithViews()
.AddRazorRuntimeCompilation();
纸壳CMS采用预编译和动态编译的混合模式。主题目录~/wwwroot/themes
下的视图不会被预编译以方便在线修改。
插件变化
纸壳CMS的插件项目类型更改为:Microsoft.NET.Sdk.Razor
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ZKEACMS\ZKEACMS.csproj" />
</ItemGroup>
</Project>