Подтвердить что ты не робот

Отсутствует 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>

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

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

4b9b3361

Ответ 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.)