我被 Razor 解析器问题难住了,我的开发设置正在运行,但在我部署的站点上失败了。
具体来说,我在@section 中有以下剃刀标记:
@section HtmlHeader
{
<style>
@@media (max-width: 400px)
{
#lnkHome { display: none; }
}
</style>
}
这在我的本地开发设置上工作正常,但在服务器上我得到:
“@”在代码块的开头无效。只有标识符、关键字、注释、"(" 和 "{" 是有效的。
现在我知道我可以很容易地解决这个问题:
@("@")media (max-width: 400px)
逃避@@,但我想了解为什么行为会有所不同。
需要明确的是 - 问题似乎只发生在@section 内部。如果我在某个部分之外有@@,则这两个版本都没有问题。但是,在实时站点(运行 Server 2008 R2)部分中,它很糟糕。
我检查了什么:
- 在两台机器上运行相同版本的 .NET 4.5
- 所有 Razor 和 MVC 文件都是复制本地部署和 Web 部署
- 从开发机器中删除了 GAC 的 MVC4 和 Razor 安装
- 有效的开发环境:Windows 8,实时服务器:Windows 2008 R2
我假设“正确”行为是针对 @@ 的,但它肯定不适用于实时服务器。