Чому System.Web.Mvc не вказаний у Додати довідки?


132

Використовуючи C #, Visual Studio 2010.

Існує простір імен під назвою System.Web.Mvc, задокументований на MSDN. Документація для всіх типів у цьому просторі імен говорить про те, що вони є System.Web.Mvc.dll.

Однак, коли я переходжу на Додати довідку, вкладку ".NET", ця збірка відсутня у списку. Чому?


1
Чи можете ви уточнити: чи працює ваш проект без посилання? Це у вашому web.config (див. Мою відповідь)?
Основний

4
Я не працюю над жодним проектом. Я просто хотів допомогти комусь тут у StackOverflow. Я зазвичай додаю посилання для того, щоб подивитися на IntelliSense та / або F12 для будь-якого типу. У цьому випадку потрібна збірка відсутня у списку, тому я запитав, чому.
Тімві

1
ПРИМІТКА для читачів цієї сторінки - на сьогодні (2015-02-09) метод її вирішення з часом змінився - прочитайте всі відповіді - різні версії VS.NET і .NET Framework переміщують код, на який посилається MVC, у в різні місця.
qxotk

Відповіді:


106

У VS Express 2012 я не зміг знайти System.Web.Mvc на вкладці "асамблеї", але після невеликого пошуку я виявив, що мені потрібно заглянути на вкладку " збірки \ розширення ", а не за замовчуванням "збірки \ рамки" ".


1
+1 для вас, тому що ви знайшли першопричину проблеми, яка була у мене. Я вирішив використовувати метод установки NuGet, прописаний нижче, і я прокоментую там, що я зробив.
qxotk

Я спробував цей метод у Visual Studio Community 2015, але у мене виникла помилка виконання, пов’язана з несумісністю версії ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference). У моєму рішенні є ще один проект, що стосується іншої версії, і цей метод дозволив мені лише додати посилання на System.Web.Mvc, Version = 4.0.0.0. Метод установки NuGet додав правильну версію
NJS

101

Найкращий спосіб - використовувати менеджер пакунків NuGet.

Просто оновіть наведений нижче пакет MVC, і він повинен працювати.

введіть тут опис зображення


4
Я мушу визнати, що це правильний спосіб додати посилання на MVC у більшості випадків (це повинно позбавити вас від проблем із запуском програми поза Visual Studio, які можуть спричинити погані посилання). Однак у великих рішеннях, які вже містять MVC деякі проекти, використання "Управління пакетами NuGet для рішення" для встановлення тієї ж версії бібліотеки ще краще. Причина полягає в тому, що якщо ви просто встановите їх з диспетчера пакунків NuGet, у вас може виникнути несумісність версій (менеджер зазвичай пропонує вам найновішу версію).
jahu

2
Я використав це рішення для проекту з використанням MVC 4, який не вдалося компілювати з Visual Studio 2015. Це також гарантує, що бібліотеки проектів є однаковими для всіх розробників.
ceetheman

1
У мене була ця проблема з вікном, на якому було лише VS2015, а в інших членів команди VS2013 - який може посилатися на старе місце розташування (відсутність помилок збирання), в той час як у мене не було коду та помилки побудови. Зверніть увагу, станом на сьогодні я не міг знайти Microsoft.Web.Mvc - які були посилання, які спричинили проблему. У відповіді від @forderah проливає світло на те, що назва NuGet відрізняється. Microsoft.Web.Mvc зараз є Microsoft.AspNet.Mvc, який також враховує залежності, перелічені у його / її відповіді.
qxotk

1
У мене навіть була проблема в VS2017, і це виправлено. Не впевнений, чому VS2017 сказав мені, що він вважає, що збірка, на яку потрібно посилатись, є System.Web.Mvc, хоча насправді шукає Microsoft.AspNet.Mvc
Майкл Девідсон

60

У мене була та сама проблема, і я не зміг знайти сборку посилань System.Web.MVC.

Нарешті з’ясували, і він знаходився всередині наступного місця.

Зверніть увагу, якщо ваш VS був встановлений на C: (Іноді MVC.dll знаходиться не за замовчуванням, про яке всі говорять, я маю на увазі " Довідкові збори папку ", розташовану на диску C:.)

якщо його там немає, воно обов'язково повинно бути тут:

\ Файли програм (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Асамблеї \ System.Web.Mvc.dll

Тож додайте dll через навігацію або вкладку перегляду в меню довідкового додати.


1
Отримайте довідку для мене, хоча я впевнений, що раніше я додав це посилання через список Рамкових зборів.
Зарефет

9
Не дуже вдале рішення, якщо ви працюєте в команді з VCS. Абсолютні шляхи в цьому випадку є злими.
Денис Грозний

Безумовно, погоджуєтесь, що це погане рішення у будь-якому середовищі розвитку команди через важко кодовану абсолютну залежність шляху.
Крейг

Шлях, який ви обходите, - це забезпечити, щоб усі використовували однаковий шлях для DLL. Це не повинно бути проблемою, якщо всі члени команди мають збірки, встановлені в цьому місці, як слід. Альтернативно, DLL можна скопіювати з цього шляху та розмістити безпосередньо в проекті, тому він має відносний шлях. Але в будь-якому випадку, просто розташування місця, де знаходиться ця DLL, - хороша відправна точка.
vapcguy

Це справді допомогло; але Microsoft повинна була зробити це набагато більш чистим і легким ....
ДжозефДоггі

28

Ви також можете додати це з консолі диспетчера пакунків Nuget, наприклад:

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

Microsoft.AspNet.Mvc залежить від:

  • "Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && <2.1)"
  • "Інфраструктура Microsoft.Web.Infrastructure (≥ 1.0.0.0)"
  • "Microsoft.AspNet.Razor (≥ 2.0.20710.0 && <2.1)"

... що здається мені не великим. У нашому випадку це бібліотека класів, яка існує виключно для підтримки підтримки наших програм Mvc. Отже, ми вважаємо, що це в найгіршому випадку доброякісна залежність.

Я, безумовно, вважаю за краще це вказувати на збірку у файловій системі або в GAC, оскільки оновлення пакета в майбутньому, ймовірно, буде набагато менш болісним, ніж досвід, який я мав із посиланнями на GAC та файлову систему в минулому.


1
Я використовував цей метод, і я згоден з тим, щоб не використовувати локальні абсолютні шляхи в посиланнях. Я використовував диспетчер пакунків NuGet, додавши пакет і залежності вирішив проблему на своєму вікні, призначеному лише для VS2015.
qxotk

11

У мене була така ж проблема, і ось ця смішна причина: я здогадуюсь, що ви очікуєте, що ви System.Web.Mvcбудете розташовані System.Webв списку. Але список не є алфавітним.

Спочатку сортуйте список, а потім подивіться біля System.Web.


1
Також переконайтеся, що ви отримуєте правильну версію. У моєму випадку System.Web.Mvc v2 та v4 є, і вони теж не поруч.
TTT

З тією ж причиною виникли проблеми з пошуку System.Web.Mvc. Натомість я пішов із Microsoft.AspNet.Mvc, переконавшись, щоб перевірити, чим використовуються інші проекти в моєму рішенні щодо номера версії.
qxotk

5

"Добре, додаючи, що XML в Web.config працює, але він не відповідає на питання"

Це повинно бути там. За замовчуванням список виданих посилань здається впорядкованим, але це не так. Натисніть на заголовок імені та подивіться ще раз.


Я часто не кажу, що "ця збірка відсутня у списку", якщо я не впевнений у цьому.
Тімві

@Timwi Я подумав, але, зважаючи на іншу відповідь, є мало шансів, що його немає там, коли встановлено vs 2010, і що в моєму випадку я завжди знаходив те, що мені потрібно в списку посилань, не потрапляючи в заголовок імені, який я мав сказати це ... насправді, я тепер знаю, чому мені ніколи до цього не було до і в порівнянні з 2010 роком
eglasius

Так ви кажете, що натискання заголовка Ім'я сортує для вас речі? Тут нічого не робиться на моїй машині ...
Роман Старков

1
@romkyns працює лише після завантаження всіх збірок у списку.
eglasius

5

Перевірте цей крок:

  1. Перевірте, чи MVC встановлений правильно.
  2. Перевірте властивість проекту та подивіться, що таке цільова рамка проекту. Якщо цільова рамка не встановлена ​​на .Net Framework 4, встановіть її.

Примітка : якщо цільова рамка встановлена ​​у. Профілі клієнта. Net Framework 4, вона не відображатиме посилання MVC у списку посилань. Ви можете знайти різні між .Net Framework 4 і .NET Framework 4 Client Profile тут .

Профіль клієнта .NET Framework 4 - це підмножина .NET Framework 4, оптимізована під клієнтські програми. Він надає функціональність для більшості клієнтських програм, включаючи Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) та функції ClickOnce. Це дозволяє швидше розгорнути та зменшити пакет встановлення для програм, орієнтованих на профіль клієнта .NET Framework 4.


Це була гарна порада. Коли я перейшов до властивостей свого проекту, він перерахував лише .NET Core 1 і 2. Ні. NET Framework 4.x. У моєму списку бракувало збірок. Виявилося, я будував свій проект - я вибрав неправильний варіант - використовувати .NET Core замість .NET Framework. Тепер я знаю різницю. :)
vapcguy

4

Я вирішив цю проблему шляхом пошуку "mvc". System.Web.Mvc з'явився в результатах пошуку, незважаючи на те, що він не міститься у списку.


3

Бажана збірка з'явилася в списку зараз.

Я можу лише здогадуватися про те, що спричинило його появу, але я підозрюю, що це те, що я перейшов ФайлНовийПроектВеб-додаток ASP.NET , чого я ніколи раніше не робив. Можливо, що це спричинило затримку якоїсь пізньої ініціалізації, і список заповниться додатковими збірками для веб-розробки.


це завжди напевно завжди було, його нормально: P ... дивіться коментар, який я додав до своєї відповіді, у посиланні сказано: "Проблема з вкладкою .net - це в той час, як відбувається асинхронізація і оновляється, її не сортуючи в алфавітному порядку ... "... що є новою поведінкою проти 2010 року, я ніколи цього не усвідомлював, поки не побачив ваше запитання.
eglasius

@egl Я щойно тестував на своїй машині тут (VS2010), і її взагалі немає у списку. Я отримую різні набори збірок залежно від Target Framework, але цього ніколи немає.
Роман Старков

@romkyns спробуйте орієнтуватися на .net 4 і виконувати те, що я згадував у своїй відповіді. Також переконайтеся, що приділіть йому достатньо часу для завантаження, оскільки це робить асинхронне навантаження.
eglasius

2

Це змінилося для Visual Studio 2012 (я знаю, що в оригінальному питанні написано VS2010, але заголовок все ще потрапить у пошукові запити).

Коли ви створюєте проект VV2012 MVC, system.web.mvc розміщується в папці пакунків, яка знаходиться в рішенні рішення. Це буде посилатися на веб-проект за замовчуванням, і ви можете знайти там точний шлях).

Якщо ви хочете посилатися на це у вторинному проекті (скажімо, підтримуючу .dll з фільтрами чи іншими атрибутами), тоді ви можете посилатися на неї звідти.


2

Я не отримав System.Web.Mvc у VS 2012, але отримав його у VS 2013. Використовуючи діалог AddReference, введіть тут опис зображення

Або ви можете знайти це у своєму проектному шляху,

YourProjectName \ пакети \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll


Прекрасна порада, що показує, де знайти в існуючому шляху проекту. Дякую!
Алан

0

Я вважаю, що ви знайдете збірку MVC посилається у файлі web.config, а не в самому проекті.

Щось на зразок цього:

<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>

Щоб відповісти на ваш коментар;

Найкраща відповідь, яку я можу дати, - звідси :

Елемент add додає посилання на збірку для використання під час компіляції динамічного ресурсу. При складанні кожного модуля коду ASP.NET автоматично пов'язує цю збірку з ресурсом.


Гаразд, додаючи, що XML в Web.config працює, але це не відповідає на питання.
Тімві

"працює", як це забезпечує інтелігенцію? Я відредагував свою відповідь
Basic

0

його можна встановити окремо, і це не включено в framwork, виберіть список "розширення" табуляції, і він існує, є ще й інші libs, все нормально, не потрібно для старих libs тощо. Існує стара 20 30 і 4001


0

Якщо у вас виникла ця проблема в Visual Studio 2017, швидше за все, ви працюєте з проектом MVC 4, створеним у попередній версії VS, на який вказується шлях підказки C:\Program Files (x86)\Microsoft ASP.NET. Visual Studio 2017 більше не встановлює цей каталог.

Зазвичай ми вирішуємо це, встановлюючи копію Visual Studio 2015 поряд із нашим екземпляром 2017 року та встановлюючи необхідні бібліотеки у вказаному вище шляху. Потім ми оновлюємо всі посилання на зачіпані проекти і ми готові йти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.