【问题标题】:How to check ASP.NET Core RC2/1.0 Razor views for compile errors?如何检查 ASP.NET Core RC2/1.0 Razor 视图的编译错误?
【发布时间】:2016-06-06 16:15:47
【问题描述】:

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

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

(我正在 ASP.NET CLI samples 的 HelloMvc 项目上对此进行测试。Views\Home\Index.cshtml 文件中可以包含任何内容,dotnet build 仍然会成功。)

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    当前的 RC2 构建系统似乎完全忽略了 Compiler/Preprocess 文件夹 - 您可以在其中放入任何内容,并且不会产生构建错误。在 Roslyn 重新连接以进行预编译之前,我认为目前无法在构建阶段检查 .cshtml 文件。

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

    更新

    commit that removed razor precompilation,好像整个RazorPreCompileModule本身其实都被去掉了,还有won't be back for some time。即使此代码手动添加回您的项目,看起来 dotnet build 也不会运行任何编译模块。

    更新 2

    视图编译功能回归 ASP.NET Core 1.1!

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

    "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 命令添加到“发布后”:

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

    更新 3 - csproj

    我们终于开始迁移到 VS2017 并将项目迁移到 csproj。这当然破坏了 razor 预编译,男孩想知道如何修复它是一个兔子洞 - official instructions are here

    您可能遇到的第一个问题是自动 xproj/project.json -> csproj 迁移失败。如果您的 project.json 中有 postpublish 脚本部分,则自动迁移将失败,因此请在进行迁移之前完全删除该部分。

    事实证明,您仍然可以通过将 <Target Name="PostPublishTarget" AfterTargets="Publish">...</Target> 添加到您的 .csproj 来运行发布后脚本,但是对于 razor 预编译来说,这现在是不必要的。因此,事不宜迟,以下是迁移项目后如何在 VS2017/csproj 领域启用 razor 预编译:

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

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

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

      <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>

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

    【讨论】:

    • 既然 ASP Core 项目已经移回 csproj 格式,有什么想法吗?
    • @Ryan 这是用于发布的。正常的构建/编译呢?
    • @MoHradA 我还没有在构建中找到支持的方法,没有<MvcRazorCompileOnBuild> 标签。看起来 post build 目标也不起作用,因为 razor-precompile 命令不再起作用。
    • @Ryan 我做了你所说的一切,但在重建项目时它不会显示视图中的错误。
    • @Sergey 它只尝试在 Publish 上构建剃须刀页面,而不是不幸地构建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多