У нас есть старое веб-приложение 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>
Попробовал еще раз и получил те же предупреждения.
У меня вопрос - есть ли у меня проблема? Или я решу это, несмотря на предупреждения?
источник
Ответы:
Получите последнюю версию 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>
источник
Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstall
является более явным, устанавливает версию, которая у вас есть для этого проекта, и предотвращает ее взаимодействие с другими проектами (при желании).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?
источник
Самый простой способ решить эту проблему - установить ASP.NET MVC 3 из установщика веб-платформ.
http://www.microsoft.com/web/downloads/
Или с помощью команды Nuget
Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
источник
в VS 2017 я очистил решение, перестроил его и исправил
источник
У меня такая же ситуация: Visual Studio 2010, NuGet не установлен, и приложение ASP.NET, использующее System.Web.Mvc версии 3.
Что сработало для меня, так это настроить каждый проект C #, который использует System.Web.Mvc, для перехода к ссылкам в обозревателе решений и установить свойства в System.Web.Mvc, с Copy Local на true и Specific Version на false - последняя заставила поле Version показать текущую версию на этом компьютере.
источник
Была эта проблема в vs2017, я уже получил MVC через nuget, но System.Web.Mvc не отображался в списке «Сборки» в разделе «Добавить ссылку».
Решением было выбрать «Расширения» в разделе «Сборки» в диалоговом окне «Добавить ссылку».
источник
В моем случае у меня были все необходимые ссылки в моем проекте. Я обнаружил, что при создании решения пакеты nuget были автоматически восстановлены.
источник
В образце mvcmusicstore.codeplex.com, открытом в vs2015, отсутствуют некоторые ссылки, в том числе System.web.mvc.
Исправление состояло в том, чтобы удалить его из ссылок и добавить ссылку: выберите Extensions в разделе Assemblies, там вы можете найти и добавить System.Web.Mvc.
(Другие сборки, которые я добавил с пакетами nuget.)
источник
На всякий случай у кого-то будет такая же ошибка. В моем случае понижение версии Microsoft.AspNet.Mvc с последующим обновлением помогло. У меня возникла эта проблема после установки и удаления Glimpse. System.Web.Mvc каким-то образом неправильно ссылался, очистка решения или его перестройка не сработали в моем случае. Просто попробуйте, если ни один из приведенных выше ответов не работает для вас.
источник
Снова добавьте ссылку из ./packages/Microsoft.AspNet.Mvc.[version provided/lib/net45/System.Web.Mvc.dll
источник