Почему System.Web.Mvc не указан в списке «Добавить ссылки»?

132

Используя C #, Visual Studio 2010.

В MSDN задокументировано пространство имен System.Web.Mvc . В документации для всех типов в этом пространстве имен указано, что они входят в System.Web.Mvc.dll.

Тем не менее, когда я иду на Добавить ссылку, вкладку «.NET», эта сборка отсутствует в списке. Зачем?

Timwi
источник
1
Не могли бы вы уточнить: РАБОТАЕТ ли ваш проект без этой ссылки? Это в вашем web.config (см. Мой ответ)?
Basic
4
Я не работаю ни над одним проектом. Я просто хотел помочь кому-то здесь, в StackOverflow. Обычно я добавляю ссылку, чтобы посмотреть на IntelliSense и / или F12 для любого типа. В этом случае желаемая сборка отсутствовала в списке, поэтому я спросил, почему.
Timwi
1
ПРИМЕЧАНИЕ для читателей этой страницы - на сегодняшний день (2015-02-09) метод решения этой проблемы со временем изменился - прочтите все ответы - различные версии VS.NET и .NET framework перемещают код, на который ссылается MVC, в в разные места.
qxotk

Ответы:

106

В VS Express 2012 я не мог найти System.Web.Mvc на вкладке «сборки», но после небольшого поиска я обнаружил, что мне нужно посмотреть вкладку « сборки \ расширения », а не стандартную вкладку «сборки \ фреймворк». "таб.

Jahu
источник
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, версия = 4.0.0.0. Метод установки NuGet добавил правильную версию
NJS
101

Лучший способ - использовать менеджер пакетов NuGet.

Просто обновите приведенный ниже пакет MVC, и он должен работать.

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

Sandeep Talabathula
источник
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 находится не в папке по умолчанию, о которой все говорят, я имею в виду папку « Reference Assemblies », расположенную на диске C :.)

если его нет, то он обязательно должен быть здесь:

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

Поэтому добавьте dll с помощью навигации или вкладки обзора в меню добавления справки.

Патрик Хофман
источник
1
Это дает мне ссылку, хотя я уверен, что ранее добавлял эту ссылку через список сборок Framework.
Zarepheth
9
Не очень хорошее решение, если вы работаете в команде с VCS. В этом случае абсолютные пути - зло.
Denis The Menace
Определенно согласен с тем, что это плохое решение для любой среды командной разработки из-за жестко заданной абсолютной зависимости пути.
Крейг
Способ обойти это - убедиться, что все используют один и тот же путь для 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 и файловой системы.

fordareh
источник
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 работает, но не отвечает на вопрос»

Это должно быть там. По умолчанию список добавления ссылок выглядит упорядоченным, но это не так. Нажмите на заголовок имени и посмотрите еще раз.

eglasius
источник
Я не часто говорю «эта сборка отсутствует в списке», если не уверен в этом.
Timwi
@Timwi Я подумал, но, учитывая другой ответ, очень мало шансов, что его там нет с установленным vs 2010, и что в моем случае я всегда находил то, что мне нужно, в списке ссылок, даже не нажимая заголовок имени, который у меня был чтобы сказать это ... на самом деле, теперь я знаю, почему мне никогда не приходилось это делать раньше, а в vs 2010 я это сделал - см. первый комментарий: weblogs.asp.net/scottgu/archive/2009/10/29/…
eglasius
Так вы говорите, что щелчок по заголовку «Имя» решает все за вас? Здесь на моей машине ничего не работает ...
Роман Старков
1
@romkyns работает только после загрузки всех сборок в списке.
eglasius 08
5

Проверьте эти шаги:

  1. Убедитесь, что MVC установлен правильно.
  2. Проверьте свойство проекта и посмотрите, что такое целевая платформа проекта. Если целевая платформа не установлена ​​на .Net Framework 4, установите ее.

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

Клиентский профиль .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 появился в результатах поиска, несмотря на то, что он не содержится в списке.

zety
источник
3

Теперь желаемая сборка появилась в списке.

Я могу только предположить, что вызвало его появление, но я подозреваю, что это тот факт, что я выбрал ФайлСоздатьПроектASP.NET Web Application , чего я никогда раньше не делал. Возможно, это вызвало некоторую позднюю инициализацию и заполнение списка дополнительными сборками для веб-разработки.

Timwi
источник
он всегда наверняка всегда был там, все в порядке: P ... см. комментарий, который я добавил к своему ответу, в ссылке говорится: «Проблема с вкладкой .net заключается в том, что когда происходит асинхронный режим и он обновляется, его не сортировка в алфавитном порядке ... "... что является новым поведением по сравнению с 2010, я никогда не осознавал, пока не увидел ваш вопрос.
eglasius
@egl Я только что протестировал здесь на своей машине (VS2010), и его вообще нет в списке. Я получаю разные наборы сборок в зависимости от Target Framework, но этого никогда не бывает.
Роман Старков
@romkyns попробуйте настроить таргетинг на .net 4 и сделать то, что я упомянул в своем ответе. Также убедитесь, что у него достаточно времени для загрузки, поскольку он выполняет асинхронную загрузку.
eglasius
2

Это изменилось для Visual Studio 2012 (я знаю, что оригинальный вопрос говорит VS2010, но заголовок все равно будет попадать при поиске).

При создании проекта VS2012 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 работает, но не отвечает на вопрос.
Timwi
"работает" как в нем предусмотрен intellisense? Я отредактировал мой ответ
Basic
0

он может быть установлен отдельно, и он не включен в фреймворк, выберите список вкладок «расширения», и он существует, есть и другие библиотеки, все в порядке, не требуется для старых библиотек и т. д., существует старые 20 30 и 4001

user1005462
источник
0

Если у вас возникла эта проблема в Visual Studio 2017, скорее всего, вы работаете с проектом MVC 4, созданным в предыдущей версии VS, со ссылочным путем подсказки, указывающим на C:\Program Files (x86)\Microsoft ASP.NET . Visual Studio 2017 больше не устанавливает этот каталог.

Обычно мы решаем эту проблему, устанавливая копию Visual Studio 2015 вместе с нашим экземпляром 2017 года и устанавливая необходимые библиотеки по указанному выше пути. Затем мы обновляем все ссылки в затронутых проектах, и все готово.

JD Mallen
источник