it-roy-ru.com

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

У нас есть старое веб-приложение 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 помечается как отсутствующий. Если я удаляю его и пытаюсь добавить обратно, используя диалоговое окно Add Reference 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>

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

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

69
Jeff Dege

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

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

Если вы нажмете клавишу «Tab» после «-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>
120
3spot

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?

24
kirk

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

 enter image description here

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

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

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
16
Md. Alim Ul Karim

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

То, что сработало для меня, состояло в том, чтобы установить каждый проект C #, который использует System.Web.Mvc, перейти в «Ссылки» в обозревателе решений и установить свойства для System.Web.Mvc, для параметра «Копировать локальный» - «истина», а для «Определенной версии» - «ложь» - последнее вызвало в поле «Версия» текущую версию на этом компьютере.

2
Dronz

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

1
PBMe_HikeIt

Образец mvcmusicstore.codeplex.com, открытый в vs2015, пропустил некоторые ссылки, одна из них System.web.mvc.

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

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

0
Bob Lokerse

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

0
cal5barton

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

0
Mehmet Can Erim

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

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

0
the_doc