Chúng tôi có Ứng dụng web ASP.NET MVC 3 cũ, được xây dựng trong VS2010, không thể biên dịch, kể từ bản cập nhật bảo mật tuần trước.
Vấn đề là tham chiếu đến System.Web.Mvc.dll bị hỏng.
Khi tôi mở tệp giải pháp trên máy xây dựng của chúng tôi, nơi bản cập nhật bảo mật chưa chạy và mở hộp thoại thuộc tính cho Tham khảo-> System.Web.MVC, nó trông vẫn ổn.
Đường dẫn là C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll Phiên bản là 3.0.0.0
Nhưng khi tôi mở tệp giải pháp trên máy nhà phát triển nơi bản cập nhật bảo mật đã chạy, Tham chiếu-> System.Web.MVC bị gắn cờ là thiếu. Nếu tôi xóa nó và cố gắng thêm lại nó bằng hộp thoại Add Reference của VS2010, nó sẽ không hiển thị.
Lang thang trên web đã đưa tôi đến các đề xuất liên quan đến việc cập nhật MVC bằng NuGet. Chúng tôi đã không sử dụng NuGet, trong các dự án VS2010 của chúng tôi, vì vậy điều đó có vẻ không đúng lắm cho tình huống này. Tôi đã thử nó dù sao, và kết thúc với một nửa tá tài liệu tham khảo bị thiếu.
Khi tôi xem các thuộc tính cho "C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" trong Windows Explorer, trên máy xây dựng, tôi thấy phiên bản 3.0.0.0.
Khi tôi xem các thuộc tính trên máy dev, tôi thấy phiên bản 3.0.50813.1.
Những gì tôi cần là một cách để thay đổi cách tôi xây dựng và chạy để tôi có thể xây dựng và chạy bất kể tệp nào trong hai tệp DLL này được cài đặt trong khuôn khổ .NET 3.0.
Ý tưởng?
Những gì tôi đã thử mà không hiệu quả
Lần thử đầu tiên - nếu cụm bị thiếu, hãy thêm nó. Tôi đã xóa tài liệu tham khảo cũ bị thiếu. Sau đó, tôi sao chép DLL từ thư mục "ASP.NET MVC3 \ Assemblies", vào một thư mục trong dự án của tôi. Đặt nó là "Copy Always" và thêm nó làm tham chiếu.
Với điều đó, dự án sẽ biên dịch trong VS2010, nhưng khi tôi cố gắng biên dịch trước các trang bằng aspnet_compiler, tôi nhận được cảnh báo:
(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
Cho đến nay, tôi đã có thể quản lý để tránh hiểu các chính sách thời gian chạy, nhưng tôi đã cố gắng thêm điều này, trong web.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Đã thử nó một lần nữa và nhận được cảnh báo tương tự.
Câu hỏi của tôi là - tôi vẫn có một vấn đề? Hay tôi sẽ giải quyết nó, bất chấp những lời cảnh báo?