Не удалось загрузить файл или сборку System.Runtime, Version = 4.1.2.0

Внезапно после добавления некоторых пакетов NuGet (в основном, связанных с ASPNET Identity), он начал показывать эту ошибку:

FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

У меня есть.Net Framework 4.7.1. Я попытался установить пакет NuGet System.Runtime 4.3.0, это не помогло. Файл web.config имеет ссылку:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
  <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
</dependentAssembly>

В папке bin нет файла System.Runtime.dll.

Есть идеи?

Я использую Visual Studio 2017 15.5.5.

ОБНОВИТЬ:

Я использую записи PackageReference в файле.csproj, поэтому это не проблема с package.config.

Кажется, что некоторые зависимости не загружены.

Ответ 1

Это было недавно, когда я обновлял проект с net462 до net471, проблема в моем случае заключалась в некоторых перенаправлениях сборки, которые требовались для версии net462, но сильно запутывали net471.

Решение состояло в том, чтобы удалить все записи перенаправления сборки в web.config и позволить Visual Studio пересчитать их - они появятся как предупреждение, на которое можно нажать, чтобы повторно добавить их в web.config

Ответ 2

Мой проект ASP.NET был уже включен в net471 в VS 15.8.4, когда это началось. Когда я попытался обновить существующие пакеты NuGet до последних версий, я получил бы эту ошибку при запуске проекта в IIS Express.

BadImageFormatException: Не удалось загрузить файл или сборку "System.Runtime" или одну из его зависимостей.

Я смог решить эту проблему, изменив файл проекта web.config.

  <dependentAssembly>
    <assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
  </dependentAssembly>

Удаление строк bindingRedirect для обеих этих зависимостей System.Runtime разрешило эту проблему в моем проекте, оставив меня с этим в моем web.config.

  <dependentAssembly>
    <assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  </dependentAssembly>

Ответ 3

В папке bin нет файла System.Runtime.dll.

Пакет System.Runtime ссылается, но его необходимо установить.

  • В меню Visual Studio откройте "Инструмент"> "Диспетчер пакетов NuGet"> " Управление пакетами NuGet для решения"...

  • В активном окне NuGet-Solution перейдите на вкладку Installed, перейдите в System.Runtime от Microsoft. Выберите одним щелчком мыши и посмотрите на боковое окно, если версия существует для проекта. Если нет, выберите проект и нажмите "Установить".

  • Построить решение.

Ответ 4

Решение для меня состояло в том, чтобы запустить следующую команду из консоли диспетчера пакетов:

Get-Project –All | Add-BindingRedirect

Это воссоздает переадресацию сборки, которая гораздо предпочтительнее удалять их, как показывают другие ответы.

Ответ 5

Привязка сборки может быть неправильной.

УДАЛИТЕ разделы AssemblyBinding app.config или web.config. Затем запустите этот BindingRedirect в окне диспетчера пакетов:

Get-Project –All | Add-BindingRedirect

Необязательно: Если вы обновляете базовую версию всех проектов, вам потребуется переустановить все пакеты Nuget для всех проектов. Для этого легко используйте скрипт менеджера пакетов:

Get-Project –All | % { Get-Package -ProjectName $_.ProjectName | % { update-package $_.Id -reinstall -ProjectName $_.ProjectName -ignoreDependencies } }

Затем запустите приведенный выше код Binding Redirect.