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