In< MVC6我可以在发布时预编译.cshtml文件,这样他们就不必在被请求时首次点击时编译。
是否可以在MVC6中预编译.cshtml文件?
答案 0 :(得分:21)
添加对Microsoft.AspNetCore.Mvc.Razor.ViewCompilation
的引用:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0-msbuild3-update1" PrivateAssets="All" />
</ItemGroup>
发布项目时启用剃刀视图编译。
<PropertyGroup>
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
</PropertyGroup>
有关详细信息,请参阅this GitHub问题。
Razor预编译在ASP.NET Core 1.0 MVC 6 RC2中被删除但在ASP.NET Core 1.1中使用了一个工具brought back,你可以这样添加:
Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design
部分下添加对dependencies
的引用,如下所示:"Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design": { "type": "build", "version": "1.1.0-preview4-final" }
Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Tools
部分下添加对tools
的引用,如下所示:"Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Tools": "1.1.0-preview4-final",
"scripts": { "postpublish": "dotnet razor-precompile --configuration %publish:Configuration% --framework %publish:TargetFramework% --output-path %publish:OutputPath% %publish:ProjectPath%" }
答案 1 :(得分:12)
回答Visual Studio 2017:
从Visual Studio解决方案资源管理器编辑项目.csproj,如果属性不存在,则添加值为true的MvcRazorCompileOnPublish
和PreserveCompilationContext
属性
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
....
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
通过nuget或编辑.csproj
将包Microsoft.AspNetCore.Mvc.Razor.ViewCompilation
添加到项目中
<ItemGroup>
...
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0" />
</ItemGroup>
**以下答案仅适用于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;
}
}
在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();
}
}
您可以在asp.net github页面上查看整个项目的预编译示例project。
您也可以在发布时编译整个应用程序。
将发布编译为nuget包的整个应用程序。
答案 2 :(得分:1)
最后,从ASP.NET Core 1.1开始支持Razor视图预编译。
以下是公告:Announcing the Fastest ASP.NET Yet, ASP.NET Core 1.1 RTM
它说:
视图的Razor语法提供了灵活的开发体验 其中视图的编译在运行时自动发生 视图已执行。但是,在某些情况下,您可以这样做 不希望在运行时编译Razor语法。你现在可以编译了 Razor认为您的应用程序引用并部署它们 应用。要启用视图编辑作为发布您的 应用,
- 添加引用 “Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design”下 “依赖”部分。
- 添加引用 “Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Tools”下的工具 部分
- 添加一个postpublish脚本来调用视图编译器:
醇>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">""</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/database</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="show_sql">true</property>
<property name="connection.pool_size">1</property>
<mapping class="pojo.Student"></mapping>
</session-factory>
</hibernate-configuration>