Reputation: 1843
I'm getting a rather strange error, which seems to have started when I updated several NUGET packages (including to MVC 5). In my "_Layout.cshtml" file, I now get the error messages that you can see in this picture (sorry, I'm too new to post it directly here yet).
These are listed as errors, not warnings. Yet my build succeeds and the project runs, and as far as I can tell it works fine. I only see these errors when I have the "_Layout.cshtml" file open. It's acting as though it can't see "System.Web.Optimization". However, if I hover over the line, it will prompt me to insert that text and make it say:
@System.Web.Optimization.Styles.Render("~/Content/kendo/css")
instead of:
@Styles.Render("~/Content/kendo/css")
But I never had to explicitly spell this out before, and if I start a new project it doesn't require me to do so. Obviously, some part of my updates has caused this strange behavior (I assume it's related to a config setting somewhere, but I can't figure out what or where). I've checked both config files (the "project" one and the "views" one), and I'm pretty sure the issue must be there, but it's beyond my ability to see the problem. If this were a normal "class" file, it would be obvious that I was missing a "using" statement at the top, but that doesn't seem to apply here.
Can anyone point me to a solution, other than explicitly pointing to the full reference in the code as mentioned above? That just doesn't seem like it should be necessary, and I feel like I'd be skirting the issue by doing so.
Upvotes: 19
Views: 12410
Reputation: 5476
All of these were already in place in Visual Studio 2017 - the only way I could get this to work using Visual Basic was to include this in the view:
@imports Microsoft.VisualBasic
Upvotes: 0
Reputation: 1
Combined by the answers above what solved the issue for me in Visual Studio 2015 was just adding:
<add namespace="System.Web.Optimization"/> in Web.Config in Views/:
Upvotes: 0
Reputation: 37957
I upgraded an MVC3 project to MVC5 by creating a basic MVC5 project and copying key pieces of BOTH Web.Configs over. (in addition to upgrading the Nuget packages as you've done.)
From Web.Config in project root:
<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>
From Web.Config in Views/:
<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>
You should take note that the final namespace add in system.web.webPages.razor is the name of the Project - in this case my empty project was named simply, "MVC5." You'll want to change that name to match your project's.
Upvotes: 0
Reputation: 39807
The most likely cause of this issue is that the web.config in your Views folder(s) is/are broken. Upgrading the ASP.NET MVC 5 requires quite a few configuration changes that I am not certain the NuGet package manager does (or does well, I think it takes care of a few of these). Along with the MVC 5 .dll, many of the other related assemblies also need to be updated and the related references updated as well.
Take a look at the following tutorial and ensure you have completed EACH of the required steps. Then do a clean, rebuild and see if your issues are resolved.
I have found that it is sometimes better to have VS create a new MVC project, then look at and compare the web.configs (both application root as well as the views folder web.config) that it generates to your project's configuration files to ensure that you are not including namespaces that don't belong and all version numbers are correct.
Upvotes: 10
Reputation: 11717
Looks like VS *.cshtml editor marks the error erronously (although the compiler can resolve the reference).
To get rid of it, just include the System.Web.Optimization
namespace at the top of your _Layout.cshtml
like this: @using System.Web.Optimization
. This should do the trick.
HTH Thomas
Upvotes: 2