Thiếu System.web.mvc


89

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?


Bạn đã thử cập nhật tất cả các gói nuget lên phiên bản mới nhất của chúng chưa (tất nhiên là nếu có thể)?
Silvermind

1
Tôi tự hỏi liệu bạn có đang gặp phải lỗi cập nhật MS14-059 ...
Steven V

1
Ứng dụng web không có bất kỳ gói nuget nào. Và có, đó là lỗi MS14-059.
Jeff Dege

Tôi đang gặp phải vấn đề tương tự, mặc dù tôi đang sử dụng gói nuget và phiên bản 4 thay thế. Nó biên dịch tốt và tất cả đều hoạt động, nhưng có hơn 20 cảnh báo biên dịch này tôi muốn loại bỏ.
Farinha

Câu trả lời:


141

Tải phiên bản mới nhất của MVC3 qua NuGet. Mở dự án của bạn trong Dev Studio. Mở tab Bảng điều khiển Trình quản lý Gói ở cuối Dev Studio. Sau đó sử dụng lệnh này:

PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

Nếu bạn nhấp vào phím tab sau "-Version", bạn sẽ nhận được danh sách tất cả các phiên bản có sẵn.

Nếu bạn có phiên bản NuGet cũ, bạn có thể gặp lỗi cho biết bạn phải nâng cấp nó. Nếu vậy, hãy mở Tools-> Extension Manager để cài đặt phiên bản NuGet mới nhất. Lưu ý, bạn sẽ cần chạy Dev Studio với tư cách Quản trị viên trước khi có thể cài đặt NuGet.

Cài đặt MVC3 nên cập nhật Web.config trong dự án của bạn.

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

1
Xấu xa !!!! đã dành hàng giờ cho việc này ... đủ đơn giản để cài đặt phiên bản trong Nuget chiều .... cảm ơn rất nhiều !!!
Squ1rr3lz,

Có, Nuget hoạt động với Visual Studio 2010. Bạn chỉ cần cài đặt nó thông qua Trình quản lý mở rộng. Trong menu Công cụ.
3 điểm

2
Gói cài đặt Microsoft.AspNet.Mvc sẽ khắc phục sự cố. Chúng tôi không thực sự cần đề cập đến số phiên bản
sujay kodamala

2
@sujaykodamala Việc đặt số phiên bản là vấn đề quan trọng nếu bạn muốn cài đặt MVC3 mới nhất chứ không phải MVC5 (phiên bản mới nhất của gói).
3 điểm

Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstalllà rõ ràng hơn, cài đặt phiên bản bạn có cho dự án đó và ngăn nó chạm vào các dự án khác (nếu muốn).
Mike E

30

MVC 5

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll

MVC 4

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll

MVC 3

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll

MVC 2

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

Tôi có thể tìm dll System.Web.MVC trong hệ thống mà MVC 3 được cài đặt ở đâu?


Cảm ơn vì điều này đã giúp tôi mở dự án được nhắm mục tiêu cho VS2010 vào năm 2018 :)
Aamol

23

Cách dễ nhất để giải quyết vấn đề này là cài đặt ASP.NET MVC 3 từ trình cài đặt Web Platforms.

nhập mô tả hình ảnh ở đây

http://www.microsoft.com/web/downloads/

Hoặc bằng cách sử dụng lệnh Nuget

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

1
Điều này đã giải quyết vấn đề của tôi phát sinh sau khi tôi chuyển sang một PC mới và có một dự án có tham chiếu đến dll ASP.NET MVC 4 mà tôi chưa cài đặt trên máy mới.
clovola

3

trong VS 2017, tôi đã làm sạch giải pháp và xây dựng lại nó và điều đó đã sửa nó


2

Tôi gặp trường hợp tương tự: Visual Studio 2010, không có NuGet được cài đặt và ứng dụng ASP.NET sử dụng System.Web.Mvc phiên bản 3.

Điều phù hợp với tôi là đặt từng dự án C # sử dụng System.Web.Mvc, đi tới Tham chiếu trong Trình khám phá giải pháp và đặt thuộc tính trên System.Web.Mvc, với Copy Local thành true và Specific Version thành false - điều cuối cùng khiến trường Phiên bản hiển thị phiên bản hiện tại trên máy đó.


1

Gặp sự cố này trong vs2017, tôi đã nhận được MVC qua nuget nhưng System.Web.Mvc không xuất hiện trong danh sách "Assemblies" trong "Add Reference".

Giải pháp là chọn "Tiện ích mở rộng" trong "Bộ lắp ráp" trong hộp thoại "Thêm tài liệu tham khảo".


0

Trong trường hợp của tôi, tôi đã có tất cả các tài liệu tham khảo thích hợp trong dự án của mình. Tôi thấy rằng bằng cách xây dựng giải pháp, các gói nuget đã được khôi phục tự động.


0

Mẫu mvcmusicstore.codeplex.com được mở trong năm 2015 đã thiếu một số tham chiếu, một trong số đó là System.web.mvc.

Khắc phục sự cố này là xóa nó khỏi các tham chiếu và thêm một tham chiếu: chọn Extentions trong Assemblies, ở đó bạn có thể tìm và thêm System.Web.Mvc.

(Các tập hợp khác mà tôi đã thêm với các gói nuget.)


0

Đề phòng trường hợp ai đó ở vị trí mà anh ta cũng mắc lỗi tương tự. Trong trường hợp của tôi, hạ cấp Microsoft.AspNet.Mvc và sau đó nâng cấp lại đã có ích. Tôi gặp sự cố này sau khi cài đặt Glimpse và gỡ bỏ nó. System.Web.Mvc đã tham chiếu sai bằng cách nào đó, làm sạch giải pháp hoặc xây dựng lại nó không hoạt động trong trường hợp của tôi. Chỉ cần thử nếu không có câu trả lời nào ở trên phù hợp với bạn.


0

Thêm lại tham chiếu từ ./packages/Microsoft.AspNet.Mvc.[version]/lib/net45/System.Web.Mvc.dll

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.