Не удалось загрузить файл или сборку 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.