Tại sao System.Web.Mvc không được liệt kê trong Thêm tài liệu tham khảo?


132

Sử dụng C #, Visual Studio 2010.

Có một không gian tên gọi là System.Web.Mvc được ghi lại trên MSDN. Tài liệu cho tất cả các loại trong không gian tên đó nói rằng chúng nằm trong System.Web.Mvc.dll.

Tuy nhiên, khi tôi đi đến Thêm tài liệu tham khảo, tab .NET .NET, tập hợp này bị thiếu trong danh sách. Tại sao?


1
Bạn có thể làm rõ: dự án của bạn làm việc mà không có tài liệu tham khảo? Có trong web.config của bạn (xem câu trả lời của tôi)?
Cơ bản

4
Tôi không làm việc trên bất kỳ dự án. Tôi chỉ muốn giúp ai đó ở đây trên StackOverflow. Tôi thường thêm một tài liệu tham khảo để xem IntelliSense và / hoặc F12 cho bất kỳ loại nào. Trong trường hợp này, lắp ráp mong muốn bị thiếu trong danh sách, vì vậy tôi hỏi tại sao.
Timwi

1
LƯU Ý cho độc giả của trang này - kể từ hôm nay (2015 / 02-09) phương pháp giải quyết vấn đề này đã thay đổi theo thời gian - đọc tất cả các câu trả lời - phiên bản khác nhau của khung VS.NET và .NET chuyển mã được tham chiếu cho MVC xung quanh vào đến những nơi khác nhau.
qxotk

Câu trả lời:


106

Trong VS Express 2012, tôi không thể tìm thấy System.Web.Mvc trong tab "lắp ráp", nhưng sau khi tìm kiếm một chút, tôi phát hiện ra rằng tôi cần xem xét tab " lắp ráp \ mở rộng " thay vì "lắp ráp \ khung mặc định " chuyển hướng.


1
+1 cho bạn vì bạn đã tìm thấy nguyên nhân gốc rễ của vấn đề tôi gặp phải. Tôi đã chọn sử dụng phương thức cài đặt NuGet được đăng ký bên dưới và tôi sẽ bình luận về những gì tôi đã làm.
qxotk

Tôi đã thử phương pháp này trong Visual Studio Community 2015 nhưng tôi gặp lỗi thời gian chạy liên quan đến tính không tương thích phiên bản ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference). Tôi có một dự án khác trong giải pháp của mình tham chiếu một phiên bản khác và phương pháp này chỉ cho phép tôi thêm một tham chiếu đến System.Web.Mvc, Version = 4.0.0.0. Phương thức cài đặt NuGet đã thêm phiên bản chính xác
NJS

100

Cách tốt nhất là sử dụng trình quản lý gói NuGet.

Chỉ cần cập nhật gói MVC bên dưới và nó sẽ hoạt động.

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


4
Tôi phải thừa nhận rằng đây là cách phù hợp để thêm tham chiếu vào MVC trong hầu hết các trường hợp (nó sẽ giúp bạn tránh được các vấn đề khi chạy ứng dụng bên ngoài Visual Studio mà các tham chiếu xấu có thể gây ra). Tuy nhiên, trong các giải pháp lớn đã chứa MVC một số dự án, sử dụng "Quản lý gói NuGet cho giải pháp" để cài đặt cùng một phiên bản của thư viện thậm chí còn tốt hơn. Lý do là, nếu bạn chỉ cài đặt chúng từ trình quản lý gói NuGet, bạn có thể sẽ không tương thích với phiên bản (người quản lý thường sẽ cung cấp cho bạn phiên bản mới nhất).
năm15

2
Tôi đã sử dụng giải pháp đó cho một dự án sử dụng MVC 4 không thể biên dịch với Visual Studio 2015. Nó cũng đảm bảo rằng các thư viện dự án thống nhất trên tất cả các nhà phát triển.
ceetheman

1
Tôi gặp vấn đề này với một hộp chỉ có VS2015 trên đó, trong khi các thành viên khác trong nhóm có VS2013 - có thể họ đã tham chiếu vị trí cũ (không có lỗi xây dựng) trong khi tôi không có mã và lỗi xây dựng. Lưu ý, tính đến hôm nay, tôi không thể tìm thấy Microsoft.Web.Mvc - vốn là các tài liệu tham khảo gây ra sự cố. Trong câu trả lời từ @forderah đã làm sáng tỏ sự thật rằng cái tên này khác với NuGet. Microsoft.Web.Mvc hiện là Microsoft.AspNet.Mvc, cũng bao gồm các phụ thuộc được liệt kê trong câu trả lời của anh ấy / cô ấy.
qxotk

1
Tôi thậm chí đã có vấn đề này trong VS2017, và điều này đã khắc phục nó. Không chắc tại sao VS2017 nói với tôi rằng nó nghĩ rằng hội đồng cần được tham chiếu là System.Web.Mvc trong khi nó thực sự đang tìm kiếm Microsoft.AspNet.Mvc
Michael Davidson

60

Tôi gặp vấn đề tương tự và không thể định vị được tổ hợp tham chiếu System.Web.MVC.

Cuối cùng tìm ra và nó được đặt bên trong vị trí sau.

Lưu ý nếu VS của bạn đã được cài đặt trong C: (Đôi khi MVC.dll không ở vị trí mặc định mà mọi người nói đến, ý tôi là thư mục " Tham chiếu lắp ráp " nằm trong ổ C :.)

nếu nó không ở đó, nó chắc chắn nên ở đây:

\ Tệp chương trình (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

Vì vậy, thêm dll thông qua điều hướng hoặc tab duyệt trong menu thêm tham chiếu.


1
Điều này nhận được tài liệu tham khảo cho tôi, mặc dù tôi chắc chắn trước đây tôi đã thêm tài liệu tham khảo này thông qua danh sách Khung lắp ráp.
Zarepheth

9
Giải pháp không thực sự tốt nếu bạn làm việc trong một nhóm với VCS. Con đường tuyệt đối là xấu xa trong trường hợp này.
Denis The Menace

Chắc chắn đồng ý rằng đây là một giải pháp tồi trong bất kỳ loại môi trường phát triển nhóm nào vì sự phụ thuộc đường dẫn tuyệt đối được mã hóa cứng.
Craig

Cách bạn đi xung quanh đó là đảm bảo mọi người đều sử dụng cùng một đường dẫn cho DLL. Sẽ không thành vấn đề nếu tất cả các thành viên trong nhóm có lắp ráp tại vị trí đó, như họ nên làm. Ngoài ra, DLL có thể được sao chép từ đường dẫn đó và được đặt trực tiếp vào dự án, do đó, nó có một đường dẫn tương đối. Nhưng dù bằng cách nào, chỉ cần có vị trí của DLL đó, là một điểm khởi đầu tốt.
vapcguy

Điều này thực sự có ích; nhưng Microsoft nên làm điều này sạch sẽ và dễ dàng hơn nhiều ....
JosephDoggie

28

Bạn cũng có thể thêm phần này từ Bảng điều khiển Trình quản lý gói Nuget, đại loại như:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.20710.0 -ProjectName XXXXX

Microsoft.AspNet.Mvc có sự phụ thuộc vào:

  • 'Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && <2.1)'
  • 'Microsoft.Web.Infr Hạ tầng (≥ 1.0.0.0)'
  • 'Microsoft.AspNet.Razor (≥ 2.0.20710.0 && <2.1)'

... có vẻ như không có vấn đề gì với tôi Trong trường hợp của chúng tôi, đây là một thư viện lớp chỉ tồn tại để cung cấp hỗ trợ cho các ứng dụng Mvc của chúng tôi. Vì vậy, chúng tôi cho rằng đó là một sự phụ thuộc lành tính ở mức tồi tệ nhất.

Tôi chắc chắn thích điều này khi chỉ đến một hội đồng trên hệ thống tệp hoặc trong GAC, vì việc cập nhật gói trong tương lai có thể sẽ ít đau đớn hơn nhiều so với những kinh nghiệm tôi đã có với các tham chiếu lắp ráp hệ thống tệp và GAC trong quá khứ.


1
Tôi đã sử dụng phương pháp này và tôi đồng ý không sử dụng các đường dẫn tuyệt đối cục bộ trong các tài liệu tham khảo. Tôi đã sử dụng trình quản lý gói NuGet, thêm gói và các phụ thuộc đã khắc phục sự cố trên hộp chỉ có VS2015 của tôi.
qxotk

11

Tôi đã có cùng một vấn đề và đây là lý do buồn cười: Tôi đoán là bạn sẽ System.Web.Mvcnằm System.Webtrong danh sách. Nhưng danh sách này không theo thứ tự abc.

Đầu tiên sắp xếp danh sách và sau đó nhìn gần System.Web.


1
Cũng đảm bảo rằng bạn đang nhận được phiên bản chính xác. Trong trường hợp của tôi System.Web.Mvc v2 và v4 đều ở đó và chúng cũng không nằm cạnh nhau.
TTT

Có cùng một vấn đề khi tìm System.Web.Mvc vì những lý do tương tự. Tôi đã đi với Microsoft.AspNet.Mvc thay vào đó, đảm bảo kiểm tra xem các dự án khác trong giải pháp của tôi đang sử dụng liên quan đến số phiên bản.
qxotk

5

"OK, thêm XML đó vào Web.config hoạt động, nhưng nó không trả lời câu hỏi"

Nó nên ở đó Theo mặc định, danh sách thêm tài liệu tham khảo dường như được sắp xếp, nhưng nó không phải là trường hợp. Nhấn tiêu đề tên và nhìn lại.


Tôi không thường nói rằng hội đồng này bị thiếu trong danh sách, trừ khi tôi chắc chắn về nó.
Timwi

@Timwi Tôi đã tìm ra, nhưng đưa ra câu trả lời khác, có rất ít khả năng nó không ở đó với phiên bản 2010 và trong trường hợp của tôi, tôi luôn tìm thấy những gì tôi cần trong danh sách tài liệu tham khảo mà không bao giờ nhấn vào tiêu đề tên tôi có để nói điều đó ... trên thực tế, bây giờ tôi biết tại sao tôi chưa bao giờ phải làm điều đó trước đây và trong năm 2010 tôi làm - xem bình luận đầu tiên: weblogs.asp.net/scottgu/archive/2009/10/29/
eglasius

Vì vậy, bạn đang nói rằng nhấp vào tiêu đề Tên sắp xếp mọi thứ cho bạn? Không có gì ở đây trên máy của tôi ...
Roman Starkov

1
@romkyns nó chỉ hoạt động sau khi tất cả các hội đồng trong danh sách đã được tải.
eglasius

5

Kiểm tra các bước sau:

  1. Kiểm tra MVC được cài đặt đúng cách.
  2. Kiểm tra thuộc tính của dự án và xem Khung mục tiêu của dự án là gì. Nếu khung đích không được đặt thành .Net Framework 4, hãy đặt nó.

Lưu ý : nếu khung mục tiêu được đặt thành .Net Framework 4 Client Profile, nó sẽ không liệt kê tham chiếu MVC trên danh sách tài liệu tham khảo. Bạn có thể tìm thấy khác nhau giữa .Net Framework 4 và .Net Framework 4 Client Profile tại đây .

Hồ sơ khách hàng .NET Framework 4 là tập hợp con của .NET Framework 4 được tối ưu hóa cho các ứng dụng khách. Nó cung cấp chức năng cho hầu hết các ứng dụng khách, bao gồm Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) và các tính năng ClickOnce. Điều này cho phép triển khai nhanh hơn và gói cài đặt nhỏ hơn cho các ứng dụng nhắm mục tiêu Hồ sơ khách hàng .NET Framework 4.


Đây là một mẹo tốt. Khi tôi đi đến các thuộc tính của dự án, nó chỉ liệt kê .NET Core 1 và 2. Không có .NET Framework 4.x. Tôi đã bị mất hội đồng trong danh sách của tôi. Hóa ra đó là cách tôi xây dựng dự án của mình - tôi đã chọn tùy chọn sai - sử dụng .NET Core thay vì .NET Framework. Bây giờ tôi biết sự khác biệt. :)
vapcguy

4

Tôi đã giải quyết vấn đề này bằng cách tìm kiếm "mvc". System.Web.Mvc xuất hiện trong kết quả tìm kiếm, mặc dù nó không có trong danh sách.


3

Việc lắp ráp mong muốn đã xuất hiện trong danh sách bây giờ.

Tôi chỉ có thể suy đoán điều gì đã khiến nó xuất hiện, nhưng tôi nghi ngờ đó là sự thật rằng tôi đã đi TệpMớiDự ánỨng dụng Web ASP.NET , điều mà tôi chưa từng làm trước đây. Có thể điều này gây ra một số loại khởi tạo muộn xảy ra và danh sách sẽ được bổ sung với các hội đồng bổ sung để phát triển Web.


nó luôn luôn chắc chắn luôn ở đó, ok: P ... xem bình luận tôi đã thêm vào câu trả lời của mình, trong liên kết có ghi: "Vấn đề với tab .net, là trong khi async đang xảy ra và nó được làm mới, nó không sắp xếp theo thứ tự bảng chữ cái ... "... đó là một hành vi mới so với năm 2010, tôi chưa bao giờ nhận ra điều đó cho đến khi tôi thấy câu hỏi của bạn.
eglasius

@egl Tôi mới thử nghiệm trên máy của tôi ở đây (VS2010) và nó không có trong danh sách. Tôi nhận được các tập hợp khác nhau tùy thuộc vào Target Framework, nhưng bộ này không bao giờ có.
Roman Starkov

@romkyns hãy thử nhắm mục tiêu .net 4 và thực hiện những gì tôi đã đề cập trong câu trả lời của mình. Ngoài ra, hãy đảm bảo cung cấp cho nó đủ thời gian để tải, vì nó tải không đồng bộ.
eglasius

2

Điều này đã thay đổi cho Visual Studio 2012 (tôi biết câu hỏi ban đầu nói là VS2010, nhưng tiêu đề vẫn sẽ được nhấn vào các tìm kiếm).

Khi bạn tạo một dự án MVC VS2012, system.web.mvc được đặt trong thư mục gói ngang hàng với giải pháp. Điều này sẽ được tham chiếu trong dự án web theo mặc định và bạn có thể tìm thấy đường dẫn chính xác ở đó).

Nếu bạn muốn tham chiếu điều này trong một dự án thứ cấp (giả sử là một bộ hỗ trợ với các bộ lọc hoặc các thuộc tính khác), thì bạn có thể tham chiếu nó từ đó.


2

Tôi đã không nhận được System.Web.Mvc trong VS 2012 nhưng tôi đã nhận được nó trong VS 2013. Sử dụng hộp thoại AddReference, nhập mô tả hình ảnh ở đây

Hoặc, Bạn có thể tìm thấy điều này trong đường dẫn dự án của bạn,

YourProjectName \ gói \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll


Mẹo tuyệt vời cho thấy nơi để tìm trong đường dẫn dự án hiện có. Cám ơn!
Alan

0

Tôi tin rằng bạn sẽ tìm thấy lắp ráp MVC được tham chiếu trong tệp web.config, không phải trong chính dự án.

Một cái gì đó như thế này:

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

Để trả lời bình luận của bạn;

Câu trả lời tốt nhất tôi có thể đưa ra là từ đây :

Phần tử add thêm một tham chiếu lắp ráp để sử dụng trong quá trình biên dịch tài nguyên động. ASP.NET tự động liên kết cụm này với tài nguyên khi biên dịch từng mô-đun mã.


OK, thêm XML đó vào Web.config hoạt động, nhưng nó không trả lời câu hỏi.
Timwi

"hoạt động" như trong nó cung cấp intellisense? Tôi đã chỉnh sửa câu trả lời của mình
Basic

0

nó có thể được cài đặt tách biệt và nó không được bao gồm trong framwork, chọn danh sách tab "phần mở rộng" và nó tồn tại ở đó và nhiều lib khác, tất cả đều không cần thiết để sử dụng lib cũ, v.v., tồn tại 20 30 và 4001 cũ


0

Nếu bạn gặp vấn đề này trong Visual Studio 2017, rất có thể bạn đang làm việc với dự án MVC 4 được tạo trong phiên bản VS trước đó với đường dẫn gợi ý tham chiếu trỏ đến C:\Program Files (x86)\Microsoft ASP.NET. Visual Studio 2017 không cài đặt thư mục này nữa.

Chúng tôi thường giải quyết điều này bằng cách cài đặt một bản sao của Visual Studio 2015 cùng với phiên bản 2017 của chúng tôi và cài đặt các thư viện cần thiết trong đường dẫn trên. Sau đó, chúng tôi cập nhật tất cả các tài liệu tham khảo trong các dự án bị ảnh hưởng và chúng tôi tốt để đi.

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.