21

I really do not know what to do, I'm following this article that shows how to migrate my MVC 3 application manually .

I followed all the steps but when running my application the following error occurs:

Server Error in '/' Application.

Could not load file or assembly 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.FileLoadException: Could not load file or assembly 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Assembly Load Trace: The following information can be helpful to determine why the assembly 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' could not be loaded.

WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. Note: There is some performance penalty associated with assembly bind failure logging. To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

Stack Trace:

[FileLoadException: Could not load file or assembly 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
Microsoft.Web.Samples.PreApplicationStartCode.Start() +0

[InvalidOperationException: The pre-application start initialization method Start on type Microsoft.Web.Samples.PreApplicationStartCode threw an exception with the following error message: Could not load file or assembly 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040).]
System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +423
System.Web.Compilation.BuildManager.CallPreStartInitMethods() +306
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +677

[HttpException (0x80004005): The pre-application start initialization method Start on type Microsoft.Web.Samples.PreApplicationStartCode threw an exception with the following error message: Could not load file or assembly 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040).]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9079340 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +97 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +256

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.237

I looked through the code, but I see no reference to System.Web.WebPages.Razor in version 1.0 version 2.0 only.

ridermansb
  • 10,779
  • 24
  • 115
  • 226

9 Answers9

37

Use NuGet and add the package Microsoft.AspNet.Mvc (Microsoft Asp.Net Mvc 4). This should upgrade your references. See:

https://nuget.org/packages/Microsoft.AspNet.Mvc

You will need to upgrade the assembly references in your web.config.

Remove from the root web.config:

<assemblies>
  <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>

Add to the root web.config:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Views/Web.Config:

Change Razor from 1.0.0.0 to 2.0.0.0:

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

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

<pages validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>
</pages>
Jeroen
  • 60,696
  • 40
  • 206
  • 339
Oliver
  • 35,233
  • 12
  • 66
  • 78
  • I've lost VS 2010 intellisense support on razor page after changes. forexample; "@model MyClass" is look like wrong but work. what should I do to take back intellisense support? – Nuri YILMAZ Mar 11 '13 at 14:36
  • Go to Edit -> IntelliSense -> Refresh Local Cache and 2) Hit Ctrl+Shift+R – Oliver Mar 13 '13 at 05:39
  • 1
    In addition, I also had to remove a `` that I had in my root config. – David Ebbo Sep 11 '13 at 19:45
  • I am getting this same problem after going through the steps mentioned above. I get compile-time errors of 1. Could not load type 'System.Web.Mvc.ViewUserControl' AND 2. Could not load type 'System.Web.Mvc.ViewPage AND 3. Could not load type 'System.Web.Mvc.ViewMasterPage Though this error is only relevant to ONE of my MVC projects. The others build fine, and I've tested that the classes mentioned in the list above actually exist in code. Hmmmm... this is an error that should be occurring with all of my upgrade projects and NOT just one. Any help is greatly appreciated – Saturn K Jan 16 '14 at 20:57
2

I assumed you have MVC3 Intranet web application, when upgrade from MVC3 to MVC4 using NuGet, your application now references System.Web.WebPages.Razor Version 2.0.0.0, NOT System.Web.WebPages.Razor Version 1.0.0.0 anymore. Here is my way of resolving the reference.

There are two places to fix:

  1. In the root web.config,

    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        . . .
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        . . .
      </assemblies>
    </compilation>
    

change Version=1.0.0.0 to Version=2.0.0.0

So your new reference will look like this:

    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        . . .
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        . . .
      </assemblies>
    </compilation>
  1. In the Views folder, there is web.config file. Inspecting this file you will see it references Version 1. Replace the whole web.config file in Views folder with a new web.config file. Make a backup of the old web.config file, just in case. To get a brand new web.config for the Views folder, you create a new MVC4 application for intranet. Go to the Views folder. Copy the Web.Config file from the Views folder of the new application to the Views folder of the broken application.

Hope it helps!

DQ Vu
  • 31
  • 1
2

Did you forget to update the references in Views\Web.Config? The references in it is used to build the view pages.

jgauffin
  • 99,844
  • 45
  • 235
  • 372
1

Have you globally searched for System.Web.WebPages.Razor, Version=1.0.0.0 in your entire solution? Do you still reference System.Web.WebPages.Razor (Version 1.0.0.0)? Do you reference System.Web.WebPages.Razor Version 2.0.0.0?


[Update] I finally ran into the same issue. It seems like one of the NuGet packages I installed and uninstalled didn't entirely remove the reference to System.Web.Razor it used. Cleaning the solution didn't help because the DLL wasn't used directly by the web application. I finally got it to work by manually deleting the entire bin directory ...

Marius Schulz
  • 15,976
  • 12
  • 63
  • 97
  • I looked in my entire solution, there is no point in reference to version 1.0. Even the edited file .csproj and .sln looking for this reference. But I not found. – ridermansb Oct 05 '11 at 22:42
1

Reinstalling the AspNetSprite packages as suggested above does not solve the problem for me. But adding theses lines on the runtime\assemblyBinding section of the root web.config file works :

    <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
0

This is another Nuget package that u can use to upgrade mvc 3 to mvc 4 https://nuget.org/packages/UpgradeMvc3ToMvc4

Mahesh
  • 2,731
  • 2
  • 32
  • 31
0

this is very simple, when you update to MVC 4.0.0.0 ,but the webconfig in the solution still points to MVC 3.0.0.0.0. so just replace MVC version 3.0.0.0.0. by 4.0.0.0.0

Do the same with other assemblies, to check the version of assembly , check properties of the respective assembly in references in your project.

0

Check the web.config inside your views folder.

UPDATE:

This bit looks suspcious.

Microsoft.Web.Samples.PreApplicationStartCode

Are you referencing any sample application libraries, like MVC futures or anything like that?

Erik Funkenbusch
  • 92,674
  • 28
  • 195
  • 291
  • Already checked all, there is nothing pointing to version 1.0. See the root Web.config in: https://gist.github.com/1265901 – ridermansb Oct 05 '11 at 22:17
  • 1
    I do not understand. I did not find anything in the web.config with `Microsoft.Web.Samples.PreAppliaction...` I use `Elmah`, `Melezes`, `Mvc.Mailer` and `AutoMapper` – ridermansb Oct 05 '11 at 22:44
  • I also use these DLLs .. `Microsoft.Web.Samples.ImageOptimizationFramework` and `Microsoft.Web.Samples.SpriteHelper` .. But I do not understand how it can cause this error. If that's what's causing it. – ridermansb Oct 05 '11 at 22:47
  • 1
    @RidermandeSousaBarbosa - Well, clearly those dll's are referencing Razor and asking for verison 1.0. The fact that the namespaces are the same are clearly the problem. – Erik Funkenbusch Oct 06 '11 at 00:22
0

My application used a third-party package, the AspNetSprites-MvcAndRazorHelper. Reinstalled this package and the error of the reference was corrected.

ridermansb
  • 10,779
  • 24
  • 115
  • 226