Как проверить представления ASP.NET Core RC2/1.0 Razor для компиляции ошибок?

Предварительная компиляция представления бритвы была удалена из RC2 из-за проблем с тем, чтобы заставить ее работать в .NET Core.

Есть ли способ скомпрометировать сборку CI, если в одном из файлов .cshtml есть синтаксическая ошибка, или это будет невозможно до тех пор, пока не будет возвращена предварительная компиляция?

(Я тестирую это в проекте HelloMvc из образцов CLI для ASP.NET. Файл Views\Home\Index.cshtml может иметь буквально что-нибудь в нем, а dotnet build будет все еще преуспевает.)

Ответ 1

Текущая система сборки RC2, похоже, полностью игнорирует папку Compiler/Preprocess - вы можете буквально поместить что-нибудь в нее, и она не создаст ошибок сборки. До тех пор, пока Roslyn не будет подключен к резервной копии, чтобы сделать предварительную компиляцию, я не думаю, что в настоящее время возможно проверить файлы .cshtml на этапе сборки.

Единственное обходное решение, которое я нашел, - это заставить Visual Studio открывать каждый файл .cshtml в проекте, используя некоторые грязные тонкие/заменяющие трюки, и чтобы механизм Intellisense проверял код бритвы.

Обновление

Глядя на зафиксировать, что удаленная предварительная компиляция бритвы, кажется, что весь сам RazorPreCompileModule был удален, а не вернется в течение некоторого времени. Даже если этот код был добавлен обратно в ваш проект вручную, не похоже, что сборка в dotnet будет запускать любые компилируемые модули.

Обновление 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"
}

и в разделе "scripts" добавьте команду "precpile" для брандмауэра "postpublish":

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

Обновление 3 - csproj

Наконец, мы перешли на VS2017 и выполнили переход проекта в csproj. Это, конечно, сломало предварительную компиляцию бритвы, и мальчик был кроличьей дырой, чтобы понять, как ее исправить - официальные инструкции здесь.

Первая икота, которую вы, вероятно, ударите, - это автоматическое прохождение миграции xproj/project.json → csproj. Автоматическая миграция завершится неудачно, если в вашем project.json есть раздел postpublish script, поэтому продолжайте и полностью удалите этот раздел, прежде чем выполнять миграцию.

Как оказалось, вы все равно можете запускать сценарии публикации публикации, добавив <Target Name="PostPublishTarget" AfterTargets="Publish">...</Target> к вашему .csproj, но в любом случае это не нужно для предварительной компиляции бритвы. Поэтому без дальнейших церемоний, как включить предварительную компиляцию бритвы на территории VS2017/csproj, как только вы перенесли свой проект:

  • Добавьте ссылку на пакет компиляции с точным представлением на ваш csproj. В <ItemGroup>, содержащем все тэги проекта <PackageReference>, добавьте:

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

  • Добавьте свойство MvcRazorCompileOnPublish в ваш csproj. В разделе <PropertyGroup>, содержащем ваш проект <VersionPrefix>, <TargetFramework> и т.д., Добавьте:

    <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>

И все готово. Теперь система сборки будет запускать предварительную компиляцию бритвы каждый раз, когда проект будет опубликован. Вы должны увидеть что-то вроде Razor view compilation for myApp -> obj\Release\netcoreapp1.1\myApp.PrecompiledViews.dll в своем выпуске сборки при публикации.