Ошибка: обновить MVC4 до MVC5 в VS2012

Я получаю ниже ошибки после обновления моего проекта от MVC4 до MVC5. Я последовал за Как обновить проект ASP.NET MVC 4 и Web API до ASP.NET MVC 5 и веб-API 2

Assembly 'WebServices.WebApi.External, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' Как решить эту проблему?

Ответы

Ответ 1

У меня была аналогичная проблема, из-за меня с помощью

_bin_deployableAssemblies

В этой папке была версия System.Web.Http в версии 4. Я удалил эту папку, и она работала

Ответ 2

Я также следую этой статье без полного успеха при запуске, но

Чтобы исправить этот "простой", создайте новый проект web mvc и сохраните его затем откройте web.config, web.config из представлений, packages.config и .csproj в блокноте

затем откройте свой проект и посмотрите на разницу во входе для номеров версий файлов например в пакетах вы должны увидеть

<package id="Microsoft.AspNet.Mvc" version="5.0.0" targetFramework="net45" />

но вы можете иметь

<package id="Microsoft.AspNet.Mvc" version="4.x.x.x" targetFramework="net40" />

в web.config

<dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>

но вы можете иметь

<dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>

в .csproj

<Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.Helpers.dll</HintPath>
    </Reference>

но вы можете иметь

<Reference Include="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.Helpers.dll</HintPath>
    </Reference>

заменить все новыми значениями

после этого сделайте Ctrl + Shift + B и в консоли nuget обновите все пакеты по comand Update-Package

для меня эта работа наконец

Ответ 3

Необходимо проверить все ссылки на WebServices.WebApi.External project. Один из них может по-прежнему использовать System.Web.Http версии 4. Или попробуйте привязать его явно в web.config

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>      
    </assemblyBinding>
  </runtime>

Ответ 4

Я решил это, установив System.Web.Http.WebHost. Вы можете установить с помощью nuget и выполнить поиск WebHost. Это точная ссылка https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0

вы также можете установить его из консоли диспетчера пакетов: PM > Установочный пакет Microsoft.AspNet.WebApi.WebHost

Ответ 5

Была та же проблема. Решено путем удаления старого пакета AttributeRouting с помощью Nuget. Конечно, он больше не нужен.

Это тоже было в проекте модульного тестирования.

Ответ 6

В моем случае я просто удалил неприятное связывание из файла Web.config, что решило проблему.

Создайте резервную копию web.config, затем просто удалите элемент dependentAssembly, содержащий элемент assemblyIdentity с именем System.Web.Http.

<dependentAssembly>
  <assemblyIdentity name="System.Net.Http" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

Это сработало для меня мгновенно.