MVC6是否支持预编译视图?

Sta*_*ams 14 asp.net-core-mvc asp.net-core

在<MVC6中,我可以在发布时预编译.cshtml文件,这样在请求时不必在第一次打击时编译它们.

是否可以在MVC6中预编译.cshtml文件?

Muh*_*eed 21

csproj(VS 2017)答案

添加引用Microsoft.AspNetCore.Mvc.Razor.ViewCompilation:

<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0-msbuild3-update1" PrivateAssets="All" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

发布项目时打开剃刀视图编译.

<PropertyGroup>
    <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅 GitHub问题.

xproj和project.json(VS 2015)答案

Razor预编译在ASP.NET Core 1.0 MVC 6 RC2中被删除,但是使用了一个工具可以在ASP.NET Core 1.1中恢复,你可以这样添加:

  1. Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design在如下的dependencies部分下添加引用:
"Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design": {
    "type": "build",
    "version": "1.1.0-preview4-final"
}
  1. Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Tools在如下的tools部分下添加引用:
"Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Tools": "1.1.0-preview4-final",
  1. 添加postpublish脚本以调用视图编译器:
"scripts": {
   "postpublish": "dotnet razor-precompile --configuration %publish:Configuration% --framework %publish:TargetFramework% --output-path %publish:OutputPath% %publish:ProjectPath%"
}


dev*_*ric 12

Visual Studio 2017的答案:

从Visual Studio解决方案资源管理器中编辑项目的.csproj,并添加MvcRazorCompileOnPublishPreserveCompilationContext与真实值的属性,如果没有已存在,

<PropertyGroup>
      <TargetFramework>netcoreapp1.1</TargetFramework>
      ....
      <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
      <PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

Microsoft.AspNetCore.Mvc.Razor.ViewCompilation通过nuget或编辑.csproj 将包添加到项目中

<ItemGroup>
     ...
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

**以下答案仅适用于ASP.NET Core RC1.**

您可以创建一个继承自RazorPreCompileModule并重写该EnablePreCompilation方法的类,将razor预编译设置为true.

using Microsoft.AspNet.Mvc.Razor.Precompilation;
using Microsoft.Dnx.Compilation.CSharp;

namespace PrecompilationWebSite
{
    public class RazorPreCompilation : RazorPreCompileModule
    {
        protected override bool EnablePreCompilation(BeforeCompileContext   context) => true;
    } 
}
Run Code Online (Sandbox Code Playgroud)

Startup.cs参考这个方法:

public class Startup
{
    // Set up application services
    public void ConfigureServices(IServiceCollection services)
    {
        // Add MVC services to the services container
        services
            .AddMvc()
            .AddPrecompiledRazorViews(GetType().GetTypeInfo().Assembly);
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseCultureReplacer();

        app.UseMvcWithDefaultRoute();
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以看一下预编译例子项目整个项目的asp.net GitHub的页面上.

您也可以在发布时编译整个应用程序.

在此输入图像描述

这将发布编译为nuget包的整个应用程序.