当前的 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 预编译:
-
将正确的视图编译包引用添加到您的 csproj。在包含您项目的所有<PackageReference> 标签的<ItemGroup> 中,添加:
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0" />
-
将 MvcRazorCompileOnPublish 属性添加到您的 csproj。在包含您的项目<VersionPrefix>、<TargetFramework> 等的<PropertyGroup> 部分中,添加:
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
你就完成了。现在,每次发布项目时,构建系统都会运行 razor 预编译。发布时,您应该在构建输出中看到类似 Razor view compilation for myApp -> obj\Release\netcoreapp1.1\myApp.PrecompiledViews.dll 的内容。