Cập nhật Windows khiến MVC3 và MVC4 ngừng hoạt động


126

Tôi có phải là người duy nhất đã cài đặt Windows Update (8.1) vào ngày 15 tháng 10 và đột nhiên MVC ngừng hoạt động vì cảnh báo này không?

Cảnh báo 1 Không thể giải quyết tham chiếu này. Không thể xác định vị trí lắp ráp "System.Web.Mvc, Phiên bản = 4.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35, bộ xử lýArch architecture = MSIL". Kiểm tra sự chắc chắn nếu muốn thoát khỏi ổ đĩa. Nếu tham chiếu này được yêu cầu bởi mã của bạn, bạn có thể gặp lỗi biên dịch.

Có vẻ như bản cập nhật windows này cài đặt phiên bản MVC mới hơn với số phiên bản 4.0.0.1 và xóa phiên bản cũ khỏi thư mục tệp chương trình.

Ai đó biết cách khắc phục điều này mà không thu thập dữ liệu cho từng dự án?


Tài liệu tham khảo từ đâu? GAC? Tham khảo lắp ráp hoặc nuget?
thổi vào

1
Đọc blog của Microsoft về vấn đề này. (Cảm ơn e4rthdog đã liên kết với điều này, chỉ cần bình luận để có được khả năng hiển thị nhiều hơn)
Hanna



1
Hãy nhớ rằng bạn cũng sẽ phải chỉnh sửa web.config trong môi trường sản xuất của mình.
Thuyền trưởng Kenpachi

Câu trả lời:


107

Giải pháp tốt nhất là cập nhật DLL lên phiên bản 4.0.0.1. Hãy thử sử dụng nuget:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804 -Project <your project name>

Điều này sẽ tự động cập nhật

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

Bạn chỉ cần chỉnh sửa phiên bản System.Web.Mvc theo cách thủ công:

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


1
Yeap, chỉ cần thay thế tham chiếu GAC bằng tham chiếu NuGet. Làm việc cho chúng tôi.
abatishchev

7
Đọc blog của Microsoft về vấn đề này. (Cảm ơn e4rthdog đã liên kết với điều này, chỉ cần bình luận để có được khả năng hiển thị nhiều hơn)
Hanna

10
Mọi ý kiến ​​tại sao, sau khi thực hiện những điều trên, tôi nhận được một loạt các cảnh báo sau: " System.Web.Mvc, Version = 4.0.0.1, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35 ', bạn có thể cần cung cấp chính sách thời gian chạy "?
Farinha

1
@Farinha, tôi có những cảnh báo tương tự. Tôi không thể lấy chúng đi. Những cảnh báo này giết chết hiệu suất xây dựng. Bạn đã tìm ra cách khắc phục điều này chưa?
StefanHa

3
Không có @StefanHa, chưa tìm thấy bản sửa lỗi nào. Tôi nhận thấy có một loạt các tham chiếu đến 4.0.0.0 trong toàn bộ ứng dụng, trong các tệp Web.config bên trong các thư mục Lượt xem, nhưng ngay cả sau khi thay đổi thủ công tất cả các cảnh báo đó vẫn còn.
Farinha

26

Chúng tôi phải chạm thủ công từng .csproj để cập nhật phiên bản từ 4.0.0.0 lên 4.0.0.1 để các bản dựng của chúng tôi hoạt động. Khá đau.

Tài liệu tham khảo mới sẽ giống như:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3
Lưu ý thay đổi tương tự là cần thiết cho MVC 3.0, tham chiếu phải là "3.0.0.1" để hoạt động trở lại.
Andy

Trong trường hợp của tôi, điều này là bắt buộc và cũng cần phải chỉ ra rằng "Phiên bản cụ thể" là "Đúng"
pimbrouwers

24

Có vấn đề tương tự sau khi cập nhật:

Cập nhật bảo mật cho Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Nhưng chỉ dành cho dự án có tham chiếu đến System.Web.Mvc, không được cài đặt theo gói.

Đồng nghiệp của tôi, người đã không cài đặt Microsoft ASP.NET MVC 4.0 Runtime và không nhận được bản cập nhật, không gặp sự cố và vẫn tham chiếu đến 4.0.0.0, không phải 4.0.0.1.

Tôi đã thay đổi thủ công tham chiếu thành 4.0.0 . 1 , sau khi đăng ký, đồng nghiệp của tôi vẫn có thể xây dựng với tham chiếu đến 4.0.0. 0 .
(Hoạt động cả trên Win7 Pro SP1, VS2013 Pro Update 3)


22

Vui lòng xem blog này, cách được đề xuất là cập nhật gói NuGet tương ứng:

http://bloss.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Để trích:

Vấn đề có thể được giải quyết bằng cách thực hiện một trong các giải pháp sau:

  1. (Ưu tiên) Cài đặt Microsoft.AspNet.Mvc từ thư viện NuGet (điều này sẽ cài đặt một chuyển hướng ràng buộc trong web.config của bạn). Bạn có thể làm điều này từ trình quản lý gói NuGet hoặc bảng điều khiển NuGet trong Visual Studio:

    Cài đặt-Gói Microsoft.AspNet.Mvc -Version -Project PRO DỰNAME

    Phiên bản MVC 4: 4.0.40804.0

    Phiên bản MVC 3: 3.0.50813.1

  2. Cập nhật thủ công tham chiếu đến System.Web.MVC.dll (không sử dụng tài liệu tham khảo trong GAC).

    Hãy thử hộp thoại Thêm tham chiếu -> Lắp ráp -> Tiện ích mở rộng.



4

Đối với dự án web, bạn cũng có thể phải cập nhật cấu hình trong web.config:

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

2

Bạn cần thay đổi tất cả các tham chiếu đến System.Web.Mvc trong giải pháp của bạn. Chỉ cần xóa chúng và thêm phiên bản 4.0.0.1 mới.

Ngoài ra trong các thuộc tính thay đổi copy localthành đúng.

Và trong web.config thêm liên kết assambly để trỏ đến phiên bản mới của mvc:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

Cài đặt CopyLocal=truekhông giúp chúng tôi; xem: System.Web.MVCkhông được sao chép vào binthư mục kể từ MS14-059
Danny Tuppeny

1

Được chứ,

Đối với tôi đó là hai bước đơn giản:

Đầu tiên tôi thay đổi tất cả các tham chiếu đến System.Web.Mvc từ 4.0.0.0 thành 4.0.0.1,

Sau đó, tôi đã phải đi đến các thuộc tính của System.Web.Mvc (có thể vì tôi đã gỡ bỏ và thêm lại nó) và thay đổi bản sao cục bộ thành true.

Hy vọng điều này là hữu ích cho ai đó.


0

Nếu bạn vẫn gặp lỗi tương tự sau khi thử giải pháp @Krzysztof hoặc bất kỳ câu trả lời nào khác ở trên, một cách giải quyết có thể phù hợp với bạn là gỡ cài đặt MVC Runtime 4.0

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.