如何检查ASP.NET Core RC2 / 1.0 Razor视图是否存在编译错误?

时间:2016-06-06 16:15:47

标签: asp.net-core

has been removed from RC2引起的Razor视图预编译issues with getting it to work in .NET Core

如果其中一个.cshtml文件中存在语法错误,是否有办法使CI版本失败,或者在预编译回来之前这是不可能的?

(我正在ASP.NET CLI samples对HelloMvc项目进行测试。2016-06-06 18:28:10.281 #####[37127:1228517] ( "Global Giving" ) 文件中可以包含任何内容,Views\Home\Index.cshtml仍然会成功。)

1 个答案:

答案 0 :(得分:5)

当前的RC2构建系统似乎完全忽略了Compiler/Preprocess文件夹 - 你可以在字面上放置任何内容,它不会产生构建错误。在Roslyn连接回来进行预编译之前,我认为目前无法在构建阶段检查.cshtml文件。

我发现的唯一解决方法是让Visual Studio使用一些脏的/替换技巧在项目中打开每个 .cshtml文件,并让Intellisense引擎检查剃刀代码。< / p>

<强>更新

查看commit that removed razor precompilation,似乎整个RazorPreCompileModule本身已被删除,won't be back for some time。即使将此代码手动添加回项目,看起来dotnet build也不会运行任何编译模块。

更新2

View Compilation返回ASP.NET Core 1.1!

要启用它,请将以下内容添加到project.json“dependencies”部分:

"dependencies": {
    "Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design": "1.1.0-preview4-final"
}

以及以下“工具”部分:

"tools": {
    "Microsoft.AspNetCore.Razor.Tools”: “1.1.0-preview4-final",
    "Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Tools": "1.1.0-preview4-final"
}

在“脚本”下,将razor-precompile命令添加到“postpublish”:

"scripts": {
    "postpublish": [
        "dotnet razor-precompile -configuration %publish:Configuration% -framework %publish:TargetFramework% -output-path %publish:OutputPath% %publish:ProjectPath%"
    ]
}

更新3 - csproj

我们终于开始转向VS2017并执行项目迁移到csproj。这当然打破了剃刀前编译,男孩是一个兔子洞来弄清楚如何解决它 - official instructions are here

您可能遇到的第一次打嗝是自动xproj / project.json - &gt; csproj迁移失败。如果postpublish中有project.json脚本部分,则自动迁移将失败,因此请在执行迁移之前完全删除该部分。

事实证明,您仍然可以通过向<Target Name="PostPublishTarget" AfterTargets="Publish">...</Target>添加.csproj来运行发布后脚本,但现在无论如何这对于剃刀预编译都是不必要的。所以不用多说了,这里是如何在迁移项目后在VS2017 / csproj中启用剃刀预编译:

  1. 将正确的视图编译包引用添加到csproj中。在包含所有项目<ItemGroup>标记的<PackageReference>中,添加:

    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0" />

  2. 将MvcRazorCompileOnPublish属性添加到csproj。在包含项目<PropertyGroup><VersionPrefix>等的<TargetFramework>部分中,添加:

    <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>

  3. 你已经完成了。现在,构建系统将在每次发布项目时运行razor预编译。发布时,您应该在构建输出中看到类似Razor view compilation for myApp -> obj\Release\netcoreapp1.1\myApp.PrecompiledViews.dll的内容。