简体   繁体   中英

Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ASP.NET MVC

I went through many answers that answered before but I'm not lucky to find a solution of my problem. This Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' and many others I used.

****Here is the runtime error:****

Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.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=3.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=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' could not be loaded.

=== Pre-bind state information === LOG: DisplayName = System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (Fully-specified) LOG: Appbase = file:///C:/menupoly/abdulla/men1/MenuSnaps/ LOG: Initial PrivatePath = C:\\menupoly\\abdulla\\men1\\MenuSnaps\\bin

Calling assembly : Microsoft.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.

LOG: This bind starts in default load context. LOG: Using application configuration file: C:\\menupoly\\abdulla\\men1\\MenuSnaps\\web.config LOG: Using host configuration file: C:\\Users\\user\\Documents\\IISExpress\\config\\aspnet.config LOG: Using machine configuration file from C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\config\\machine.config. LOG: Post-policy reference: System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 LOG: Attempting download of new URL file:///C:/Users/user/AppData/Local/Temp/Temporary ASP.NET Files/root/c0c49273/dff4168/System.Web.WebPages.Razor.DLL. LOG: Attempting download of new URL file:///C:/Users/user/AppData/Local/Temp/Temporary ASP.NET Files/root/c0c49273/dff4168/System.Web.WebPages.Razor/System.Web.WebPages.Razor.DLL. LOG: Attempting download of new URL file:///C:/menupoly/abdulla/men1/MenuSnaps/bin/System.Web.WebPages.Razor.DLL. WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Stack Trace:

[FileLoadException: Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.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.Helpers.PreApplicationStartCode.Start() +0

[InvalidOperationException: The pre-application start initialization method Start on type Microsoft.Web.Helpers.PreApplicationStartCode threw an exception with the following error message: Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.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.InvokePreStartInitMethodsCore(ICollection 1 methods, Func 1 setHostingEnvironmentCultures) +613 System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +141 System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +102 System.Web.Compilation.BuildManager.ExecutePreAppStart() +157 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +531

[HttpException (0x80004005): The pre-application start initialization method Start on type Microsoft.Web.Helpers.PreApplicationStartCode threw an exception with the following error message: Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.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) +9946024 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +90 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +261

**This is the portion of my Web.Config**

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebMatrix.WebData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebMatrix.Data" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.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>
    </assemblyBinding>

I verified the version of each on Reference are the same as on Web.Config. Please help me. Thank you for your help.

You have this binding redirection in web.config which mentions Razor 2.0 is being used instead of Razor 3.0, and you're trying to use Razor 3.0 assembly which not bound to anything:

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

The first thing you should do, change the binding redirection to use version 3.0 instead:

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

Also ensure that these configuration lines exist in web.config inside Views folder:

<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>

If it still doesn't work & you're not sure that Razor package is properly installed, try reinstall the required packages with NuGet Gallery/Package Manager Console command (with -reinstall switch), then do given step above:

Update-Package –reinstall Microsoft.AspNet.WebPages

Update-Package -reinstall Microsoft.AspNet.Razor

NB - This assembly binding indicates that MVC 4 is being used:

<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>

I recommend to upgrade your MVC project to version 5.0.0 and update Razor bindings to version 3.0.0 as suggested in this reference:

How to Upgrade an ASP.NET MVC 4 and Web API Project to ASP.NET MVC 5 and Web API 2 (Microsoft Docs)

Similar issues:

Runtime error: Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.0.0.0

Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.0.0.0

Before trying anything else,

I would suggest removing all files from the bin and obj folder Manually to ensure the new build generates files what is referred to in solution.

Usually, this happens when changing branches from shared projects/main projects.

Hope that saves some efforts in the world of .NET

I was getting the same error few days ago. After searching for one whole day I found the solution.

May be this could help you.

1. Check your Server's Path "C:\Program Files (x86)\Microsoft ASP.NET". 
   Is there any folder named "ASP.NET MVC 4" ?

2. If not you need to install ASP.NET Framework 4 in your server. 
   (if your project is in Framework 4.0)

When you encounter this kind of error related to MVC while deploying your app on a IIS server which is not the development machine, this is because you probably don't have the MVC runtimes installed on the target machine.

You can have a look to the folder C:\\Program Files (x86)\\Microsoft ASP.NET\\ASP.NET MVC 4 of your server. You should find inside a few folders, including an "assemblies" one.

If not, you can download the runtimes from MS website. I THINK this one could work : https://www.microsoft.com/en-us/download/details.aspx?id=30683&751be11f-ede8-5a0c-058c-2ee190a24fa6=True but you'll have to check. You should also be able to install MVC from Web Platform Installer.

Alternatively, you can also avoid to install the runtimes if you do not wish or if you can't :

To make your application work without the requested runtimes on server, in the "References" folder of your visual studio, you can select all offending assemblies, and for each of them, set to "True" the "Copy local". You will have to do this for the MVC dll, but probably for a few others, for example : System.Net.Http, System.Net.Http.Formatting.dll, System.Net.Http.WebRequest, System.Web.Http.dll, System.Web.Http.WebHost.dll, etc. So it will maybe require a few tries (fortunately you just have to read the error message at startup to get the name of the "next" missing DLL).

I just copied over these 8 files from my main projects bin/Debug and put them into my project that was having the System.Web exception and that solved my issues.

System.Web.WebPages
System.Web.WebPages.dll
System.Web.WebPages.Razor
System.Web.WebPages.Razor.dll
System.Web.Razor
System.Web.Razor.dll
System.Web.WebPages.Deployment
System.Web.WebPages.Deployment.dll

There is another possible cause. I just had this same error today. Basically, I imported a helper project from one solution to another, and then I got this error, even though the only web project in the new solution is an old WebForm! No razor at all!! Eventually, I realized one files in the helper project had a little code for helping process MVC drop down lists, and the helper project had a reference to System.Web.MVC. That was not needed in the new solution, so deleting that one file & the reference to System.Web.MVC solved the problem.

I had the same issue, but could not fix it for 3 days. I tried deleting .vs directory, trying with Visual Studio 2017 and 2019, removing references but the error was here:

In the bin directory, somehow (probably from the batch scripts we are using to build MS solutions) System.Web.Mvc.dll was there, and apparently it was loaded when WebForms solutions was started. After deleting the whole bin/ directory the WebForms started ok.

One problem was that I could start the WebForms solution using IIS Express, but Local IIS, but that's probably another type of problem.

手动将 System.Web.WebPages.Deployment.dll、System.Web.WebPages.dll、System.Web.WebPages.Razor.dll 添加到 References 文件夹

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM