Visual Studio MVC 5显示错误但编译并运行正常

时间:2013-12-07 16:19:48

标签: c# asp.net-mvc visual-studio-2012 asp.net-mvc-5

我得到了一个相当奇怪的错误,这似乎是在我更新了几个NUGET包(包括MVC 5)时开始的。在我的“_Layout.cshtml”文件中,我现在收到您在此图片中可以看到的错误消息(抱歉,我太新了,不能直接在此处发布)。

See here for error

这些列为错误,而不是警告。然而,我的构建成功,项目运行,据我所知,它工作正常。当我打开“_Layout.cshtml”文件时,我只看到这些错误。它表现得好像看不到“System.Web.Optimization”。但是,如果我将鼠标悬停在该行上,它将提示我插入该文本并说出:

@System.Web.Optimization.Styles.Render("~/Content/kendo/css")

而不是:

@Styles.Render("~/Content/kendo/css")

但我以前从来没有明确地说明这一点,如果我开始一个新项目,它不需要我这样做。显然,我的更新的某些部分引起了这种奇怪的行为(我认为它与某个地方的配置设置有关,但我无法弄清楚是什么或在哪里)。我已经检查了两个配置文件(“项目”一个和“视图”一个),我很确定问题必须存在,但是我无法看到问题。如果这是一个普通的“类”文件,很明显我错过了顶部的“使用”语句,但这似乎不适用于此。

除了明确指出上面提到的代码中的完整引用外,有人能指出我的解决方案吗?这似乎不应该是必要的,而且我觉得这样做可以避开这个问题。

5 个答案:

答案 0 :(得分:7)

此问题的最可能原因是View文件夹中的web.config已损坏。升级ASP.NET MVC 5需要进行相当多的配置更改,我不确定NuGet包管理器是做什么的(或者做得好,我认为它会处理其中的一些)。除了MVC 5 .dll之外,许多其他相关程序集也需要更新,相关参考也需要更新。

Take a look at the following tutorial并确保您已完成所需步骤的 EACH 。然后进行清理,重建并查看问题是否已解决。

我发现有时候让VS创建一个新的MVC项目更好,然后查看并比较它生成的web.configs(应用程序根目录和视图文件夹web.config)到项目的配置文件,以确保您不包括不属于的名称空间,并且所有版本号都是正确的。

答案 1 :(得分:1)

看起来VS * .cshtml编辑器会错误地标记错误(尽管编译器可以解析引用)。

要摆脱它,只需将System.Web.Optimization命名空间包含在_Layout.cshtml的顶部,如下所示:@using System.Web.Optimization。这应该可以解决问题。

HTH Thomas

答案 2 :(得分:0)

我通过创建一个基本的MVC5项目并复制BOTH Web.Configs的关键部分,将MVC3项目升级到MVC5。 (除了像你一样升级Nuget包之外。)

来自项目根目录中的Web.Config:

  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

来自Views /中的Web.Config:

  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="MVC5" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.webServer>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>

您应该注意,system.web.webPages.razor中的最终命名空间是项目的名称 - 在这种情况下,我的空项目简单地命名为“MVC5”。您需要更改该名称以匹配您的项目。

答案 3 :(得分:0)

结合上面的答案,我在Visual Studio 2015中解决了这个问题,只是添加:

<add namespace="System.Web.Optimization"/> in Web.Config in Views/:

答案 4 :(得分:0)

所有这些都已经在Visual Studio 2017中实现 - 我使用Visual Basic实现此功能的唯一方法是将其包含在视图中:

@imports Microsoft.VisualBasic