我得到了一个相当奇怪的错误,这似乎是在我更新了几个NUGET包(包括MVC 5)时开始的。在我的“_Layout.cshtml”文件中,我现在收到您在此图片中可以看到的错误消息(抱歉,我太新了,不能直接在此处发布)。
这些列为错误,而不是警告。然而,我的构建成功,项目运行,据我所知,它工作正常。当我打开“_Layout.cshtml”文件时,我只看到这些错误。它表现得好像看不到“System.Web.Optimization”。但是,如果我将鼠标悬停在该行上,它将提示我插入该文本并说出:
@System.Web.Optimization.Styles.Render("~/Content/kendo/css")
而不是:
@Styles.Render("~/Content/kendo/css")
但我以前从来没有明确地说明这一点,如果我开始一个新项目,它不需要我这样做。显然,我的更新的某些部分引起了这种奇怪的行为(我认为它与某个地方的配置设置有关,但我无法弄清楚是什么或在哪里)。我已经检查了两个配置文件(“项目”一个和“视图”一个),我很确定问题必须存在,但是我无法看到问题。如果这是一个普通的“类”文件,很明显我错过了顶部的“使用”语句,但这似乎不适用于此。
除了明确指出上面提到的代码中的完整引用外,有人能指出我的解决方案吗?这似乎不应该是必要的,而且我觉得这样做可以避开这个问题。
答案 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