Отсутствует System.web.mvc
У нас есть старое ASP.NET MVC 3 Web Application, созданное в VS2010, которое не скомпилируется с момента обновления безопасности на прошлой неделе.
Проблема в том, что ссылка на System.Web.Mvc.dll не работает.
Когда я открываю файл решения на нашей машине сборки, где обновление безопасности не запускалось, и откройте диалоговое окно свойств для ссылок → System.Web.MVC, это выглядит просто отлично.
Путь - C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll
Версия 3.0.0.0
Но когда я открываю файл решения на dev-машине, где было выполнено обновление безопасности, ссылки → System.Web.MVC отмечены как отсутствующие. Если я удалю его и попытаюсь добавить его обратно, используя ссылку VS2010 Add Reference, он не будет отображаться.
Блуждание по сети привело меня к предложениям, связанным с обновлением MVC с использованием NuGet. Мы не использовали NuGet в наших проектах VS2010, так что это не кажется совершенно правильным, для этой ситуации. Я все равно попробовал, и у меня получилось полдюжины отсутствующих ссылок.
Когда я смотрю на свойства для "C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll" в Проводнике Windows, на машине сборки я вижу версию 3.0.0.0.
Когда я смотрю на свойства на машине dev, я вижу версию 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>
Попробовал снова и получил те же предупреждения.
Мой вопрос: у меня все еще есть проблема? Или я разрешу это, несмотря на предупреждения?
Ответы
Ответ 1
Получите последнюю версию MVC3 через NuGet. Откройте проект в Dev Studio. Откройте вкладку Консоль диспетчера пакетов в нижней части Dev Studio. Затем используйте следующую команду:
PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
Если вы нажмете клавишу табуляции после "-Version", вы получите список всех доступных версий.
Если у вас есть старая версия NuGet, вы можете получить сообщение об ошибке, указывающее, что вам необходимо его обновить. Если это так, откройте Tools- > Extension Manager, чтобы установить последнюю версию 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>
Ответ 2
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?
Ответ 3
Самый простой способ решить эту проблему - установить ASP.NET MVC 3 из установщика веб-платформ.
![введите описание изображения здесь]()
http://www.microsoft.com/web/downloads/
Или с помощью команды Nuget
Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
Ответ 4
У меня такая же ситуация: Visual Studio 2010, не установлен NuGet и приложение ASP.NET с использованием System.Web.Mvc версии 3.
Что сработало для меня, было установить каждый проект С#, который использует System.Web.Mvc, чтобы перейти к ссылкам в обозревателе решений, а также установить свойства в System.Web.Mvc с копией Local to true и конкретной версией на false - последнее вызвало, что поле Version отображает текущую версию на этом компьютере.
Ответ 5
В моем случае у меня были все правильные ссылки в моем проекте. Я обнаружил, что, построив решение, пакеты nuget были автоматически восстановлены.
Ответ 6
Образец mvcmusicstore.codeplex.com, открытый в vs2015, пропустил некоторые ссылки, один из которых - System.web.mvc.
Исправление для этого было удалить его из ссылок и добавить ссылку:
выберите Extentions в разделе Assemblies, там вы можете найти и добавить System.Web.Mvc.
(Другие сборки, которые я добавил с пакетами nuget.)