1

我正在将解决方案从 VS2010/MVC3/.Net 4 升级到 VS2012/MVC4/.Net 4.5。该解决方案已使用 VS2012 的项目迁移工具进行了升级,我按照本指南将 MVC3 升级到 4。

目前,Razor 给我带来了问题。除了布局页面外,不会出现语法突出显示,当我尝试在视图中移动时,我会得到对话框:

等待后台操作完成。操作完成后,此对话框将关闭。

或者我收到一条错误消息,告诉我检查 Visual Studio 活动日志 (C:\Users{User}\AppData\Roaming\Microsoft\VisualStudio\11.0\ActivityLog.xml),这导致我出现此错误:

System.NullReferenceException:对象引用未设置为对象的实例。在 Microsoft.VisualStudio.Web.HTML.Implementation.Projection.GrowingSpanTracker.EnsureNoOverlap() 在 Microsoft.VisualStudio.Web.HTML.Implementation.Projection.GrowingSpanTracker.EnsureTrackingPoints() 在 Microsoft.VisualStudio.Web.HTML.Implementation.Projection.GrowingSpanTracker .OnTextBufferChanged(Object sender, TextContentChangedEventArgs e) at Microsoft.VisualStudio.Text.Utilities.GuardedOperations.RaiseEvent[TArgs](Object sender, EventHandler`1 eventHandlers, TArgs args)

日志的 Source 列表示它来自“编辑器或编辑器扩展”。我在这里运行 vanilla VS2012,除了第一方的东西(Microsoft Web Developer Tools、NuGet Package Manager 和 Visual Studio Extensions for Windows Library for JavaScript)之外没有任何扩展。

编辑:一些额外的细节。如果我创建一个新的解决方案和 MVC4 项目,请添加以下行:

@RenderSection("title", false)

到布局,然后尝试在视图中定义部分:

@section title{Stuff}

当我开始在大括号中输入“Stuff”时,我得到了相同的错误/行为。

4

1 回答 1

2

事实证明,Razor 中的任何变化都使牙套变得更加……敏感。如果您在布局中定义了这样的部分:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>@RenderSection("title", false) - MyApp</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
        @RenderSection("css",false)
    </head>
    ...

然后,在使用布局的视图中,尝试完全像这样使用该部分(确保您实际键入它,不要复制/粘贴):

@model MyApp.Web.Models.HomeIndexModel
@section title {Lovely Title}

Razor 会在你的 Visual Studio 活动日志中抛出一个错误并抛出一个错误。突出显示和大多数 Intellisense 支持也将无法正常工作。经过反复试验,我发现如果您基本上从不将大括号放在同一行上,它就可以正常工作。所以,这样写:

@model MyApp.Web.Models.HomeIndexModel
@section title {
    Lovely Title
}

它会正常工作。

于 2012-11-06T00:02:41.513 回答