2014-10-16 19 views
9

Sáng nay tôi thức dậy khi phát hiện ứng dụng web MVC 4 của tôi trên máy chủ của tôi đã bị hỏng.Ứng dụng MVC ngắt sau khi cập nhật Windows ngày 15 tháng 10

Các thông báo lỗi là:

An exception of type 'System.IO.FileNotFoundException' occurred in 
mscorlib.dll but was not handled in user code. 
Additional information: Could not load file or assembly 
'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, 
PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. 
The system cannot find the file specified. 

tôi mở dự án VS của tôi và chạy nó từ mã (do đó trên một máy tính khác nhau), xảy ra lỗi tương tự!

Tôi đã kiểm tra nhật ký máy chủ của mình và các bản cập nhật đã phát hiện được cài đặt tự động lúc 5:06 sáng. Một trong những bản cập nhật được thực hiện bởi gói cài đặt AspNetMVC4.msi. Một phút sau, các lỗi đầu tiên trên ứng dụng web của tôi bắt đầu phát trực tuyến.

Trên máy tính xách tay phát triển của tôi, trình cài đặt tương tự đã chạy ngày hôm qua (ngày 15 tháng 10) lúc 1:10:10 tối.

Cùng một sự cố trên cả hai máy tính.

Tôi chưa bao giờ nghe nói về Newtonsoft.Json (nhưng bây giờ tôi đã phát hiện ra nó là gì). Dường như một trong những dlls MVC (không chắc) hoặc một trong những gói dll (nhiều khả năng hơn) có một tham chiếu đến Newtonsoft.

Tôi đã cố gắng intall Newtonsoft từ nuget. Điều này đã có một số hiệu ứng, lỗi đã thay đổi từ FileNotFound thành FileLoadException:

An exception of type 'System.IO.FileLoadException' occurred in 
mscorlib.dll but was not handled in user code Additional 
information: Could not load file or assembly 'Newtonsoft.Json, 
Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 
or one of its dependencies. The located assembly's manifest 
definition does not match the assembly reference. (Exception 
from HRESULT: 0x80131040) 

Tôi cũng đã cố gắng nâng cấp từ .NET 4.5 lên 4.5.1. Điều đó không giúp được gì.

BTW, lỗi xảy ra trong RegisterRoutes trong Global.asax.cs:

routes.MapHttpRoute( 
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

Bất kỳ ý tưởng?

+1

Phiên bản nào bạn đã cài đặt với nuGet, bạn có thể thử bindingRedirect để chuyển hướng đến phiên bản mới xem http://msdn.microsoft.com/en-us/library/eftw1fys(v=vs.110).aspx – 3dd

+0

phiên bản của Newtonsoft.Json bạn đã cài đặt? –

+0

Có thể chuyển hướng ràng buộc lắp ráp giải quyết vấn đề này không? –

Trả lời

0

Bạn cần cài đặt Newtonsoft.Json 5.0.1 nupkg. BTW, bạn sử dụng phiên bản tệp System.Web.Http.dll nào trong dự án của mình?

+0

Nhận xét của tôi về vấn đề này đã bị xóa không chắc chắn tại sao.Điều quan trọng là bạn và cho chúng tôi hiểu tại sao điều này lại xảy ra. Chúng tôi nghi ngờ ứng dụng của bạn đang chạy trên phiên bản tiền phát hành MVC 4 (có thể là 4.0.20505.0), điều này rất nguy hiểm, nếu đây là trường hợp bạn nên nâng cấp lên phiên bản được hỗ trợ của MVC 4. –

+0

Để biết chi tiết về cách khắc phục bảo mật MVC vấn đề về bản vá xem bài đăng này: http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx –

1

Cảm ơn tất cả vì những suy nghĩ tốt đẹp của bạn! Tôi đã cố gắng thực hiện chuyển hướng lắp ráp, nhưng nó không hoạt động.

Cuối cùng tôi đã khắc phục sự cố một cách rất đơn giản. Tôi đột nhiên nhận ra rằng tôi không bao giờ sử dụng tuyến đường bên dưới:

routes.MapHttpRoute( 
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

Vì vậy, tôi đã xóa những dòng và tiền này, tất cả đã hoạt động trở lại!

Một số nghiên cứu cho tôi thấy MapHttpRoute là một phần của phiên bản cũ hơn của System.Web.Mvc.dll, nhưng không phải phiên bản mới hơn. Vì vậy, dll mới không tương thích với phiên bản cũ hơn.

Nó vẫn làm phiền tôi rằng ứng dụng web đang chạy, sản xuất bị hỏng trong khi tôi đang ngủ bằng bản cập nhật Windows. Tắt các cập nhật Windows có thể là một giải pháp, nhưng làm cho máy chủ dễ bị tổn thương hơn ... trí tuệ ở đây là gì.

Cảm ơn mọi người một lần nữa.

+0

Phần mở rộng MapHttpRoute thực sự là một phần của WebAPI chứ không phải MVC. Nếu bạn không có phiên bản WebAPI cập nhật được tham chiếu nhưng đã có mã này, nó sẽ gây ra cho bạn vấn đề này –

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