如何在 net core 2.1+ / net 5 中禁用预编译视图进行调试?
How to disable precompiled views in net core 2.1+ / net 5 for debugging?
昨天更新到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>
根据 Migrate from ASP.NET Core 1.x to 2.0 指南,您需要将 MvcRazorCompileOnPublish
设置为 false。
您应该将 MvcRazorCompileOnPublish 设置为 false,这样,它将关闭作为发布的一部分启用的所有视图编译功能。
<PropertyGroup>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>
您可以玩 MvcRazorFilesToCompile
项目 属性
MvcRazorFilesToCompile: item group that specifies view files to compile. By default this includes all .cshtml files marked as content.
注意:不要使用空字符串,因为这与默认值相同 (from repo):
<ItemGroup Condition="'@(MvcRazorFilesToCompile)' == ''">
<MvcRazorFilesToCompile Include="@(Content)" Condition="'%(Extension)'=='.cshtml'" />
</ItemGroup>
.net 核心 >= 3(也称为 .net 5)
Microsoft 创建了一个 Nuget 包。这是documented here。
只需在您的 .csproj 文件中有条件地引用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
。不要忘记调整版本,你实际使用。
<PackageReference
Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
Version="3.1.0"
Condition="'$(Configuration)' == 'Debug'" />
同时配置您的服务
public void ConfigureServices(IServiceCollection services)
{
// your MVC Builder (AddRazorPages/AddControllersWithViews)
IMvcBuilder builder = services.AddRazorPages();
#if DEBUG
// Only use Runtime Compilation on Debug
if (Env.IsDevelopment())
{
builder.AddRazorRuntimeCompilation();
}
#endif
}
当然,当你想一般使用Runtime Compilation,甚至发布时,你不需要所有的条件。
.net 核心 >= 2.1 && < 3
这可以使用 .csproj 文件中的 属性 RazorCompileOnBuild
来完成:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>true</RazorCompileOnPublish>
</PropertyGroup>
这样 Razor 文件仅在发布期间预编译。
根据用例,您还想根据构建配置进行配置:
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>true</RazorCompileOnPublish>
</PropertyGroup>
如果您在 .net core 3.1 或 .net core 5.0 上使用 ControllersWithViews,你可以看看下面的解决方案:
昨天更新到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>
根据 Migrate from ASP.NET Core 1.x to 2.0 指南,您需要将 MvcRazorCompileOnPublish
设置为 false。
您应该将 MvcRazorCompileOnPublish 设置为 false,这样,它将关闭作为发布的一部分启用的所有视图编译功能。
<PropertyGroup>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>
您可以玩 MvcRazorFilesToCompile
项目 属性
MvcRazorFilesToCompile: item group that specifies view files to compile. By default this includes all .cshtml files marked as content.
注意:不要使用空字符串,因为这与默认值相同 (from repo):
<ItemGroup Condition="'@(MvcRazorFilesToCompile)' == ''">
<MvcRazorFilesToCompile Include="@(Content)" Condition="'%(Extension)'=='.cshtml'" />
</ItemGroup>
.net 核心 >= 3(也称为 .net 5)
Microsoft 创建了一个 Nuget 包。这是documented here。
只需在您的 .csproj 文件中有条件地引用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
。不要忘记调整版本,你实际使用。
<PackageReference
Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
Version="3.1.0"
Condition="'$(Configuration)' == 'Debug'" />
同时配置您的服务
public void ConfigureServices(IServiceCollection services)
{
// your MVC Builder (AddRazorPages/AddControllersWithViews)
IMvcBuilder builder = services.AddRazorPages();
#if DEBUG
// Only use Runtime Compilation on Debug
if (Env.IsDevelopment())
{
builder.AddRazorRuntimeCompilation();
}
#endif
}
当然,当你想一般使用Runtime Compilation,甚至发布时,你不需要所有的条件。
.net 核心 >= 2.1 && < 3
这可以使用 .csproj 文件中的 属性 RazorCompileOnBuild
来完成:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>true</RazorCompileOnPublish>
</PropertyGroup>
这样 Razor 文件仅在发布期间预编译。
根据用例,您还想根据构建配置进行配置:
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>true</RazorCompileOnPublish>
</PropertyGroup>
如果您在 .net core 3.1 或 .net core 5.0 上使用 ControllersWithViews,你可以看看下面的解决方案: