升级到.NET Core 3.1之后,我的自制构建系统崩溃了。这是问题所在。我使用MSBuild在CI / CD管道中发布项目。这是我的代码:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe" C:\Company\Solution\Solution.sln /t:UserPanel /p:DeployOnBuild=true /p:PublishProfile=DeployUserPanel /p:SolutionDir=C:\Company\Solution /property:PublishFolder=C:\Publish\Solution\UserPanel /t:Publish
完全相同的代码会将.cshtml
文件发布到.NET Core 2.2中的输出目录。但是,现在我需要将它们从我的UserPanel
项目中手动复制/粘贴到publish文件夹中,这当然会破坏CI / CD的自动化。
我该如何解决?
。NET Core已转为预编译cshtml文件,因此在生产中不再需要它们。您将看到在发布输出中还应该有一个[YourApp].Views.dll
,其中包含已编译的视图。
如果绝对需要旧的行为,请参考Razor file compilation in ASP.NET Core以获取有关配置Razor运行时编译的文档。
归结为将csproj更改为
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<CopyRefAssembliesToPublishDirectory>true</CopyRefAssembliesToPublishDirectory>
<CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
</PropertyGroup>
并且将Startup.cs更改为在通话中包含.AddRazorRuntimeCompilation()
以配置MVC:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
}