2014-10-17 21 views
8

Tôi đã chạy Windows Update ngày hôm qua và giới thiệu một số vấn đề khi tôi đang cố gắng phát hành phiên bản mới của dự án ASP.NET MVC 4 của tôi.Cập nhật cửa sổ Ứng dụng Broke MVC

Ứng dụng biên dịch và chạy ổn tại địa phương, tuy nhiên khi tôi đẩy phiên bản lên đến một bài kiểm tra tại chỗ trên máy chủ web của tôi nó đã giảm hơn với thông báo lỗi:

System.Web.HttpCompileException: (0): error CS1705: Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 

Sau khi một số nghiên cứu tôi thấy rằng đây là do cập nhật từ 4.0.0.0 đến 4.0.0.1. Tôi loại bỏ các System.Web.Mvc dll từ dự án của tôi và readded dll có phiên bản sau này. Một lần nữa mọi thứ hoạt động cục bộ nhưng không hoạt động trên web. Sau đó tôi đã đi qua web.config và thay đổi bất kỳ đề cập đến từ 4.0.0.0 đến 4.0.0.1. Tương tự như vậy, điều này tiếp tục làm việc nội bộ nhưng không thành công bên ngoài. Thông báo lỗi là:

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

Tôi tin rằng điều này có liên quan đến Elmah mà tôi đang sử dụng để xử lý lỗi.

Tôi đã cố gắng cài đặt lại từ Nuget như được đề xuất ở đây: Windows update caused MVC3 and MVC4 stop working nhưng điều đó không hiệu quả và tôi gặp lỗi tương tự.

Thông tin đã thêm: Máy chủ chưa được cập nhật, tôi lo ngại rằng việc cập nhật điều này có thể làm hỏng phiên bản hiện tại.

+0

thể trùng lặp của [bản vá bảo mật ASP.NET MVC lên phiên bản 3.0.0.1 phá vỡ xây dựng] (http://stackoverflow.com/questions/26406877/asp-net-mvc-security-patch-to-version-3- 0-0-1-break-build) –

Trả lời

9

Các thông báo lỗi được nói với tôi rằng bạn đã xác định một số phiên bản không chính xác cho việc lắp ráp MVC trong một trong những tập tin cấu hình của bạn. Tìm tệp cấu hình với phiên bản không chính xác và thay đổi nó để khớp với bất kỳ phiên bản nào bạn đang sử dụng (bạn đã đề cập 4.0.0.1 ở trên). Bạn cần kiểm tra tất cả các tập tin cấu hình bao gồm

  • Một trong thư mục gốc dự án
  • Một trong Views thư mục

Bạn cũng có thể làm một assembly redirect trong tập tin cấu hình của bạn để tận quan tâm đến điều này là tốt - Nếu thất bại của nó do một bên thứ ba lib này có thể là hành động thích hợp nhất để thực hiện.

Dựa trên id phản hồi của bạn đề xuất sử dụng chuyển hướng ràng buộc. Thêm địa chỉ này vào web.config chính của bạn ..

<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.WebPages" 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-4.0.0.0" newVersion="4.0.0.1" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
+0

Cảm ơn bạn đã trả lời.Tôi đã thực hiện tìm kiếm trên toàn bộ giải pháp và tất cả System.Web.MVC đã được thay đổi. Có những người khác đang xem xét 4.0.0.0, chẳng hạn như System.Data.Entity. Ngoài ra thông báo lỗi đề cập đến 3.0.0.0, mà tôi không thể tìm thấy ở bất cứ đâu trong giải pháp. – Jay1b

+0

@ Jay1b Chuyển hướng liên kết một ảnh, tôi đã cập nhật bài đăng của mình để hiển thị những gì bạn sẽ phải thêm để làm cho nó hoạt động. – iamkrillin

+0

giữa bài đăng của tôi và của bạn tôi đã thực hiện chính xác điều đó. Đã có chuyển hướng được thiết lập từ oldVersion = "4.0.0.0-4.0.0.1", tôi đã thay đổi thành oldVersion = "3.0.0.0-4.0.0.1" và sau khi bạn đăng thử nó lên oldVersion = "1.0.0.0-4.0. 0,1 ". Vẫn không có may mắn. – Jay1b

0

Tôi gặp sự cố tương tự khi cập nhật MS thay đổi MVC.dll từ 3.0.0.0 thành 3.0.0.1. Tôi cần phải duy trì các phiên bản khác nhau của phần mềm của tôi để đảm bảo khả năng tương thích tôi phải sao chép dll 3.0.0.0 vào dự án của tôi và tham khảo nó ở đó trước khi xây dựng dự án.

0

Sau khi đào xuống một số chi tiết, tôi thấy web.config bên trong thư mục xem được trỏ đến phiên bản khác nhau System.Web.Mvc. Khi tôi thay đổi để

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

từ

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

phiên bản thay đổi System.Web.MVC để 4.0.0.0 từ 4.0.0.1 tôi đã có thể giải quyết vấn đề này.

+0

hãy mã hóa các thẻ XML trong '' ' – Alexander

Các vấn đề liên quan