如何禁用net core 2.1中的预编译视图进行调试?

Chr*_*rdt 14 c# asp.net-core-mvc asp.net-core asp.net-core-2.1

昨天我更新到net core 2.1.

现在,如果我正在调试,那么预编译的视图,在启动过程中需要花费很长时间...是否有可能回到以前的行为,如果需要的话,及时编译视图?

产量

我的csproj中没有与预编译相关的参考.它是来自元包的东西吗?

  <ItemGroup>
    <PackageReference Include="JetBrains.Annotations" Version="11.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0" PrivateAssets="All" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="2.5.0" />
    <!--<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.0" PrivateAssets="All" />-->
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

Chr*_*rdt 29

这可以使用RazorCompileOnBuildcsproj文件中的属性来完成:

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <RazorCompileOnBuild>false</RazorCompileOnBuild>
  <RazorCompileOnPublish>true</RazorCompileOnPublish>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

这样,Razor文件仅在发布期间进行预编译.

根据用例,您还需要根据构建配置进行配置:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
  <RazorCompileOnBuild>false</RazorCompileOnBuild>
  <RazorCompileOnPublish>true</RazorCompileOnPublish>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

非常感谢马克G指出我正确的方向.

  • 对于 .Net Core 3.x,您需要从 MS 安装 NuGet 扩展 https://learn.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0 - 请注意“ENV”属性需要作为 DI 参数添加到 Startup 构造函数中(根据页面底部的注释) (2认同)