Не удалось загрузить файл или сборку System.Runtime.InteropServices.RuntimeInformation

Я получаю эту ошибку всякий раз, когда пытаюсь запустить проект веб-задания с анализом приложений и структурой сущностей.

System.IO.FileLoadException: «Не удалось загрузить файл или сборку» System.Runtime.InteropServices.RuntimeInformation, Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a или одна из его зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) '

Я установил следующие пакеты nuget

Microsoft.Azure.WebJobs.Logging.ApplicationInsights версии 2.1.0-beta4

Microsoft.Extensions.Logging версии 2.0.0

Microsoft.Extensions.Logging.Console версии 2.0.0.

Все это работает с новым проектом веб-задания Visual Studio 2017, когда я пытаюсь включить существующую базу кода, в основном используя структуру сущностей, я получаю эту ошибку. Когда я смотрю на ссылку в той, которая работает, у меня нет System.Runtime.InteropServices.RuntimeInformation, но она была добавлена ​​в проект с помощью entity framework. Кажется, это часть стандарта .net, но почему мне не нужен стандарт .net для моего нового консольного приложения!

введите описание изображения здесь

Я не уверен, почему он ищет версию 0.0.0.0, поскольку у меня есть 4.0.2.0

Я также пробовал добавить это в файл проекта, но это не сработало.

<PropertyGroup>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
   <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

Любая помощь будет принята с благодарностью

Большое спасибо


person Andrew    schedule 30.01.2018    source источник
comment
Стоит отметить, что для этой dll требуется .net 4.6.1 или выше.   -  person eran otzap    schedule 01.08.2019


Ответы (3)


Может быть, в файле конфигурации отсутствует загруженная сборка? Убедитесь, что в вашем файле web.config есть что-то похожее на следующее. NuGet обычно делает это, но, возможно, это не так, и он не знает, что загружать.

<dependentAssembly>
  <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
person Jono_2007    schedule 30.01.2018
comment
Это может показаться обратным, но недавно у меня тоже была эта проблема, и зависимыйAssambly для нее (а также несколько других пакетов) уже был добавлен в web.config пакетом NuGet, который я установил. В моем случае избавление от вновь добавленных записей зависимой сборки устранило проблему. Просто еще кое-что, чтобы попробовать. - person dwilliss; 11.09.2018
comment
@dwilliss Ваше решение сработало для меня. Спасибо, что указали на это. - person CPerson; 30.10.2019
comment
Почему это работает: если вы посмотрите на версию сборки, которую Visual Studio развертывает, в моем случае это версия 4.0.1. Насколько может судить Visual Studio, ваш код только ссылается (прямо или косвенно) на версию 4.0.1 явно, так что все, что копируется в выходной каталог. Думаю, если бы он вообще не был скопирован, это означало бы, что он включен в структуру. Если вы перестраиваете перенаправления привязки с помощью (Add-BIndingRedirect), он не добавляет это перенаправление в 4.0.2, что подтверждает, что он не нужен и действительно вреден в этом случае. Как вариант, добавьте реальную ссылку на версию 4.0.2. - person Triynko; 09.03.2020
comment
У меня сработало - это тоже актуальное решение для app.config. - person wildbagel; 25.02.2021

Подтверждение комментария, сделанного dwilliss выше, также помогло мне. Решением было избавиться от:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>

(В моем случае из app.config для службы Windows.) Мой проект косвенно зависит только от System.Runtime.InteropServices.RuntimeInformation. Это зависимость от импортированного мной пакета NuGet.

person Adam    schedule 02.12.2018
comment
Связанное сообщение на Github, в котором объясняется, почему (в каких случаях) удаление перенаправления привязки может помочь. Полный список предложений, которые стоит попробовать - github.com/dotnet/standard/issues/481 # issuecomment-429653699 - person Michael; 24.07.2019
comment
Огромное спасибо. Прокомментировал код из web.config, и он отлично работал. - person HumbleBeginnings; 03.04.2020
comment
В основном добавление bindingRedirects решает проблемы с dll. На этот раз удаление решило проблему. Без этого ответа мне пришлось бы часами разбираться в этом. - person rfcdejong; 20.10.2020

Если вы обновили версию среды выполнения .NET проекта с версии до 4.7.1 до 4.7.1 или более поздней, удалите пакет Nuget, удалите / закомментируйте часть App.config, если она остается, и повторно добавьте ссылку из фреймворк. Он находится в структуре, начиная с 4.7.1, до этого вам нужно было добавить пакет Nuget.

[править] ... в соответствии с комментарием Майкла выше, за который я проголосовал еще до "живой памяти".

person CAD bloke    schedule 30.06.2020