System.web.mvc отсутствует

89

У нас есть старое веб-приложение ASP.NET MVC 3, построенное на VS2010, которое не компилируется после обновления безопасности на прошлой неделе.

Проблема в том, что ссылка на System.Web.Mvc.dll не работает.

Когда я открываю файл решения на нашей машине сборки, на которой не запущено обновление безопасности, и открываю диалоговое окно свойств для References-> System.Web.MVC, все выглядит нормально.

Путь: C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll Версия 3.0.0.0

Но когда я открываю файл решения на машине разработчика, на которой было запущено обновление безопасности, References-> System.Web.MVC помечается как отсутствующий. Если я удалю его и попытаюсь добавить обратно с помощью диалогового окна «Добавить ссылку» VS2010, он не отобразится.

Блуждание по сети привело меня к предложениям, связанным с обновлением MVC с помощью NuGet. Мы не использовали NuGet в наших проектах VS2010, поэтому в данной ситуации это кажется не совсем правильным. Я все равно попробовал, и в итоге получил полдюжины пропущенных ссылок.

Когда я смотрю на свойства «C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll» в проводнике Windows, на машине сборки я вижу версию 3.0.0.0.

Когда я смотрю на свойства на машине разработчика, я вижу версию 3.0.50813.1.

Мне нужен способ изменить способ сборки и запуска, чтобы я мог создавать и запускать независимо от того, какая из этих двух библиотек DLL установлена ​​в платформе .NET 3.0.

Идеи?

То, что я пробовал, не сработало

Первая попытка - если сборка отсутствует, добавьте ее. Я удалил старую отсутствующую ссылку. Затем я скопировал DLL из папки «ASP.NET MVC3 \ Assemblies» в папку в моем проекте. Установите для него значение «Всегда копировать» и добавьте его как ссылку.

При этом проект будет компилироваться в VS2010, но когда я пытался предварительно скомпилировать страницы с помощью aspnet_compiler, я получал предупреждения:

(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

До сих пор мне удавалось избегать понимания политик времени выполнения, но я попытался добавить это в 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>

Попробовал еще раз и получил те же предупреждения.

У меня вопрос - есть ли у меня проблема? Или я решу это, несмотря на предупреждения?

Джефф Деге
источник
Вы пробовали обновить все пакеты nuget до последней версии (конечно, где это возможно)?
Silvermind
1
Интересно, столкнулись ли вы с ошибкой обновления MS14-059 ...
Стивен Ви,
1
В веб-приложении нет пакетов nuget. И да, это ошибка MS14-059.
Джефф Дедж
У меня похожая проблема, хотя вместо этого я использую пакет nuget и версию 4. Он отлично компилируется, и все работает, но есть эти 20+ предупреждений компиляции, от которых я бы хотел избавиться.
Фаринья

Ответы:

141

Получите последнюю версию MVC3 через NuGet. Откройте свой проект в Dev Studio. Откройте вкладку консоли диспетчера пакетов в нижней части Dev Studio. Затем используйте эту команду:

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

Если вы нажмете клавишу табуляции после «-Version», вы получите список всех доступных версий.

Если у вас старая версия NuGet, вы можете получить сообщение об ошибке, указывающее на необходимость ее обновления. Если это так, откройте Инструменты-> Диспетчер расширений, чтобы установить последнюю версию NuGet. Обратите внимание: вам нужно будет запустить Dev Studio от имени администратора, прежде чем вы сможете установить NuGet.

Установка MVC3 должна обновить Web.config в вашем проекте.

<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>
3 точки
источник
1
Badabing !!!! потратил на это часы ... достаточно просто, чтобы установить версию в личку Nuget .... большое спасибо !!!
Squ1rr3lz
Да, Nuget работает с Visual Studio 2010. Вам просто нужно установить его через Extension Manager. В меню "Инструменты".
3spot
2
Install-Package Microsoft.AspNet.Mvc решит проблему. Нам действительно не нужно указывать номер версии
суджай кодамала
2
@sujaykodamala Установка номера версии имеет значение, если вы хотите установить последнюю версию MVC3, а не MVC5 (последняя версия пакета).
3spot
Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstallявляется более явным, устанавливает версию, которая у вас есть для этого проекта, и предотвращает ее взаимодействие с другими проектами (при желании).
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

Где я могу найти dll System.Web.MVC в системе, где установлен MVC 3?

Кирк
источник
Спасибо, это помогло мне открыть проект, предназначенный для VS2010 в 2018 году :)
Aamol
23

Самый простой способ решить эту проблему - установить ASP.NET MVC 3 из установщика веб-платформ.

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

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

Или с помощью команды Nuget

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
Мкр. Алим Уль Карим
источник
1
Это решило мою проблему, которая возникла после того, как я переключился на новый компьютер и у меня был проект со ссылками на библиотеки DLL ASP.NET MVC 4, которые я еще не установил на новом компьютере.
Clovola
3

в VS 2017 я очистил решение, перестроил его и исправил

PBMe_HikeIt
источник
2

У меня такая же ситуация: Visual Studio 2010, NuGet не установлен, и приложение ASP.NET, использующее System.Web.Mvc версии 3.

Что сработало для меня, так это настроить каждый проект C #, который использует System.Web.Mvc, для перехода к ссылкам в обозревателе решений и установить свойства в System.Web.Mvc, с Copy Local на true и Specific Version на false - последняя заставила поле Version показать текущую версию на этом компьютере.

Дронз
источник
1

Была эта проблема в vs2017, я уже получил MVC через nuget, но System.Web.Mvc не отображался в списке «Сборки» в разделе «Добавить ссылку».

Решением было выбрать «Расширения» в разделе «Сборки» в диалоговом окне «Добавить ссылку».

t_warsop
источник
0

В моем случае у меня были все необходимые ссылки в моем проекте. Я обнаружил, что при создании решения пакеты nuget были автоматически восстановлены.

Cal5barton
источник
0

В образце mvcmusicstore.codeplex.com, открытом в vs2015, отсутствуют некоторые ссылки, в том числе System.web.mvc.

Исправление состояло в том, чтобы удалить его из ссылок и добавить ссылку: выберите Extensions в разделе Assemblies, там вы можете найти и добавить System.Web.Mvc.

(Другие сборки, которые я добавил с пакетами nuget.)

Боб Локерс
источник
0

На всякий случай у кого-то будет такая же ошибка. В моем случае понижение версии Microsoft.AspNet.Mvc с последующим обновлением помогло. У меня возникла эта проблема после установки и удаления Glimpse. System.Web.Mvc каким-то образом неправильно ссылался, очистка решения или его перестройка не сработали в моем случае. Просто попробуйте, если ни один из приведенных выше ответов не работает для вас.

Мехмет Джан Эрим
источник
0

Снова добавьте ссылку из ./packages/Microsoft.AspNet.Mvc.[version provided/lib/net45/System.Web.Mvc.dll

Саджитд
источник