2014-12-19 28 views
10

Tôi vừa mới cập nhật để MVC 5, sử dụng các hướng dẫn trên trang web này:ASP.NET biên dịch không thể tải System.Web.Mvc sau khi cập nhật lên phiên bản 5.2.2

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

Tôi bây giờ gặp phải lỗi này:

Could not load file or assembly 'System.Web.Mvc, Version=5.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)

Hành vi kỳ lạ đôi khi lỗi thực sự nói phiên bản 3.0.0.0 và đôi khi 5.0.0.0.

tôi đã thực hiện rất nhiều tìm kiếm, nhưng không thể tìm thấy bất cứ ai với lỗi tương tự, chỉ cần lỗi tương tự mà mọi người thảo luận về việc thay đổi phiên bản trong các tập tin cấu hình, vì vậy đây là mục config của tôi:

Dưới Xem:

<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" /> 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 

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


    <system.web> 
    <httpHandlers> 
     <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 

    <!-- 
     Enabling request validation in view pages would cause validation to occur 
     after the input has already been processed by the controller. By default 
     MVC performs request validation before a controller processes the input. 
     To change this behavior apply the ValidateInputAttribute to a 
     controller or action. 
    --> 
    <pages 
     validateRequest="false" 
     pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <controls> 
     <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> 
     </controls> 
    </pages> 
    <globalization requestEncoding="UTF-8" responseEncoding="UTF-8" uiCulture="en-GB" culture="en-GB" /> 
    </system.web> 

    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 

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

Và web.config trang web của tôi file:

<?xml version="1.0" encoding="utf-8"?> 
    <!-- 
     For more information on how to configure your ASP.NET application, please visit 
     http://go.microsoft.com/fwlink/?LinkId=169433 
     --> 
    <configuration> 
     <configSections> 
     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </configSections> 
     <connectionStrings> 
     ... 
     </connectionStrings> 
     <appSettings> 
     <add key="webpages:Version" value="3.0.0.0" /> 
     <add key="webpages:Enabled" value="false" /> 
     <add key="PreserveLoginUrl" value="true" /> 
     <add key="ClientValidationEnabled" value="true" /> 
     <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
     </appSettings> 
     <system.web> 
     <compilation debug="true" targetFramework="4.5" /> 
     <httpRuntime targetFramework="4.5" /> 
     <authentication mode="Forms"> 
      <forms loginUrl="~/Account/Login" timeout="2880" /> 
     </authentication> 
     <pages> 
      <namespaces> 
      <add namespace="System.Web.Helpers" /> 
      <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="System.Web.WebPages" /> 
      </namespaces> 
     </pages> 
     <globalization requestEncoding="UTF-8" responseEncoding="UTF-8" uiCulture="en-GB" culture="en-GB" /> 
     </system.web> 
     <system.webServer> 
     <validation validateIntegratedModeConfiguration="false" /> 
     <handlers> 
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
     </system.webServer> 
     <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.WebPages" publicKeyToken="31bf3856ad364e35" /> 
      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
     </runtime> 
     <entityFramework> 
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
      <parameters> 
      <parameter value="v11.0" /> 
      </parameters> 
     </defaultConnectionFactory> 
     </entityFramework> 
    </configuration> 

Trả lời

18

Bạn nói rằng bạn đã nâng cấp lên phiên bản 5.2.2. Vì vậy, bạn nên thay đổi

<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.Mvc" publicKeyToken="31bf3856ad364e35" /> 
    <bindingRedirect oldVersion="1.0.0.0-5.2.2.0" newVersion="5.2.2.0" /> 
</dependentAssembly> 

Rõ ràng bạn sẽ cần phải thay thế tất cả các lần xuất hiện của MVC 5.0.0.0 với 5.2.2.0.

+1

Yip, đúng vậy. Cảm ơn :) –

+0

Hướng dẫn tôi đã theo dõi không chính xác. Họ bảo tôi thay đổi thành 5.0.0.0, nhưng nó phải là 5. (bất kể phiên bản mới nhất là gì): http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet -mvc-4-và-web-api-project-tới-aspnet-mvc-5-và-web-api-2 –

+0

Các hướng dẫn này để nâng cấp lên 5.0.0.0. Bạn đã nâng cấp lên phiên bản cao hơn. –

1

Bạn cần cập nhật phiên bản của System.Mvc dll trong các dự án của mình. SportStore.DomainSportStore.UnitTests.

Để làm điều đó đầu tiên đi đến một trong hai dự án và thực hiện một nhấp chuột thứ trong tên dự án -> sau khi chọn "Manage NuGet Packages"

enter image description here

Bên Quản lý NuGetPackages bạn có thể vào " Cập nhật "tab và chọn tất cả. Bên trong này, bạn sẽ thấy tất cả các gói của bạn có sẵn để cập nhật.

Chọn Uptade trên gói MVC của bạn. Trong bức ảnh của tôi, tôi không có nó vì tôi đã cập nhật đầy đủ.

enter image description here

Lặp lại việc bổ sung này cho dự án khác và xây dựng lại dự án của bạn.

+0

Điều này không cố gắng trả lời câu hỏi. Vấn đề của OP rõ ràng đã xảy ra sau khi thực hiện nâng cấp chính xác mà bạn mô tả. –

2

tôi giải quyết vấn đề của tôi, lấy PublicKeyTokenVersionsystem.web-> Compilation-> Assemblies trong Views \ web.config và thay thế nó trong cùng một tập tin nhưng trong hệ thống .web.webPages.razor-> host key và root web.cofig tại cấu hình-> runtime-> assemblyBinding ** và tìm kiếm assemblyIdentity có tên = "System.Web.Mvc" và thay thế các giá trị của nó.

0

Sẽ có cùng trong tất cả phiên bản AssemblyBinding trong web.config chính và mỗi vùng xem tệp web.config. Tôi đã có lỗi tương tự, hãy tìm sự khác biệt giữa web.config chính và xem Khu vực.

Bạn có thể tìm thấy phiên bản System.Web.Mvc là 4.0.0.0 trong web.config chính như

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/> 
       <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="WebGrease" publicKeyToken="31BF3856AD364E35" culture="neutral"/> 
       <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234"/> 
      </dependentAssembly> 
     <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="1.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> 
     <dependentAssembly> 
     <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/> 
     <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

Nhưng một trong web.config khu vực của tôi trong Chế độ xem là

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    /pages> 
    </system.web.webPages.razor> 

Hãy kiểm tra System.Web.Mvc, Phiên bản bạn có phiên bản khác. Vì vậy, có phiên bản mới hơn trong tập tin cấu hình chính và tập tin cấu hình xem khu vực giống nhau. do đó, hãy thay đổi tệp web.config chính là:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/> 
       <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="WebGrease" publicKeyToken="31BF3856AD364E35" culture="neutral"/> 
       <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234"/> 
      </dependentAssembly> 
     <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="1.0.0.0-4.0.0.0" newVersion="5.2.3.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> 
     <dependentAssembly> 
     <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/> 
     <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
Các vấn đề liên quan