Visual Studio 2017 - Не удалось загрузить файл или сборку "System.Runtime, Version=4.1.0.0" или одну из ее зависимостей

Я использую Visual Studio 2017 и пытаюсь создать библиотеку.Net Standard 1.5 и использовать ее в тестовом проекте.Net 4.6.2 nUnit.

Я получаю следующую ошибку...

Не удалось загрузить файл или сборку 'System.Runtime, Version=4.1.0.0, Culture= нейтральный, PublicKeyToken=b03f5f7f11d50a3a' или одну из ее зависимостей. Система не может найти указанный файл.

Я пробовал следующее:

  1. Ссылка на стандартную библиотеку в качестве ссылки на проект Ошибка: дает мне предыдущую ошибку.
  2. Создать NuGet pkg для моей библиотеки Std и сослаться на это. Ошибка: тип System.String, ожидающий System.String. Это потому, что System.Runtime в итоге получил ссылку на проект, и у него есть определения для всех стандартных типов.
  3. Ссылка NuGet pkg NetStandard.Library. Ошибка: выдайте мне ту же ошибку, что и # ("Тип System.String, ожидающий System.String"). ПРИМЕЧАНИЕ. Перед этим я удалил ВСЕ пакеты NuGet из проекта, а затем добавил только пакеты nUnit и NetStandard.Library (которые установили 45 других пакетов).

Это ошибка? Есть ли обходной путь? Любая помощь приветствуется.

28 ответов

У меня была та же самая проблема, и никакие предложенные решения, которые я нашел, не работали. Мое решение для этой проблемы было: Проверьте App.config и packages.config, чтобы увидеть, совпадают ли версии.

Первоначально мой app.config содержал:

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

Но в файле packages.config содержится:

<package id="System.Runtime" version="4.3.0" targetFramework="net461" requireReinstallation="true" />

Я изменил запись app.config, чтобы она соответствовала packages.config для newVersion:

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

После изменения проблема была решена.

Я недавно столкнулся с этой проблемой, и я попробовал много вещей, упомянутых в этой теме и других. Я добавил ссылку на пакет для "System.Runtime" с помощью менеджера пакетов nuget, исправлены ошибки app.configи убедитесь, что app.config а также package.config есть такая же версия для сборки. Однако проблема осталась.

Наконец, я удалил <dependentAssembly> тег для сборки и проблема исчезла. Итак, попробуйте удалить следующее в вашем app.config,

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

Эта проблема возникает, когда вы ссылаетесь на проект.NET Standard из проекта.NET 4.x: ни одна из ссылок пакета nuget проекта.NET Standard не вводится как зависимости.

Чтобы это исправить, вам нужно убедиться, что файл.NET 4.x csproj указывает на текущие инструменты сборки (как минимум 14):

<Project ToolsVersion="15.0">...

Нижеследующее больше не нужно, это было исправлено около VS 15.3:

Была известная ошибка в VS2017, в частности в NuGet 4.0.

Чтобы обойти эту ошибку, вам нужно открыть файл.csproj для вашего проекта.NET 4.x и добавить этот фрагмент:

<ItemGroup>
  <PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
    <PrivateAssets>All</PrivateAssets>
  </PackageReference>
</ItemGroup>

NuGet 4.x приносит с собой "ссылку на пакет" - больше нет ни одного package.config - но старый конвейер 4.x не был полностью обновлен во время запуска VS2017. Вышеприведенный фрагмент похоже "пробуждает" систему сборки, чтобы правильно включать ссылки на пакеты из зависимостей.

Поверь мне, я не шучу. Удалите все зависимости System.Runtime из вашего app.config, и он начнет работать.

Я исправил эту ошибку, сославшись на файл NetStandard.Library и следующий файл app.config в NUnit-Project.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

редактировать

Если что-то кроме System.Runtime, System.Reflection или же System.Runtime.InteropServices отсутствует (например, System.Linq), затем просто добавьте новый dependentAssembly узел.

Редактировать 2

В новых версиях Visual Studio (я думаю, 2017 год, 15.8) Studio может создать файл app.config. Просто установите флажок Автоматически создавать перенаправления привязки в Project-Properties - Application. Автоматически создавать перенаправления привязки

Я исправил это, удалив мой app.config с

<assemblyIdentity name="System.Runtime" ....> 

записей.

app.config был автоматически добавлен (но не нужен) во время рефакторинга

В app.config или web.config добавьте

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

Похоже, проблема возникает из-за конфликта версий между packages.config и app.config. В app.config у вас есть перенаправления привязки сборки, автоматически генерируемые функцией AutoGenerateBindingRedirects. Если этот параметр включен каждый раз, когда вы загружаете пакет nuget, он будет, помимо создания новой записи в packages.config, добавлять эту информацию о перенаправлении привязки в app.config, какова цель этого объясняется здесь: Перенаправление привязки сборки: как и почему?

Там вы можете прочитать, что написал пользователь @Evk:

Зачем вообще нужны привязки перенаправления? Предположим, у вас есть приложение A, которое ссылается на библиотеку B, а также на библиотеку C версии 1.1.2.5. Библиотека B, в свою очередь, также ссылается на библиотеку C, но версии 1.1.1.0. Теперь у нас конфликт, потому что вы не можете загружать разные версии одной и той же сборки во время выполнения. Чтобы разрешить этот конфликт, вы можете использовать перенаправление привязки, обычно к новой версии

Итак, БЫСТРОЕ ИСПРАВЛЕНИЕ: удалите все записи в app.config.

В моем случае эта программа начала работать, но она, вероятно, будет работать только в том случае, если у вас нет конфликтов версий одной и той же сборки во время выполнения.

Если у вас есть такой конфликт, вы должны исправить эти номера версий в app.config, чтобы они соответствовали фактически используемым версиям сборок, но ручной процесс болезнен, поэтому я предлагаю автоматически сгенерировать их снова, открыв Консоль диспетчера пакетов и выполнить переустановку пакетов, набрав Update-Package -reinstall

Эта проблема имеет много причин... в моем случае проблема заключалась в том, что в моем файле web.config был добавлен тег System.Runtime:

<assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>

но один пакет также добавил ту же сборку, что и зависимость с другой версией:

<package id="System.Runtime" version="4.3.0" targetFramework="net47" />

удаление тега "добавить сборку" из моего web.config решило проблему.

Я знаю, что слишком поздно, но пока нет успешного ответа. Я нашел ответ на другом сайте. Я исправил проблему при удалении зависимости сборки System.Runtime. Я удалил это.

<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>

С уважением

Эта проблема возникает, когда вы ссылаетесь на проект.NET Standard из проекта.NET 4.x: ни одна из ссылок на пакет nuget для пакета.NET Standard не вводится как зависимости.

Я решил добавить System.Runtime 4.3 и NETStandard. Библиотека и пакет !! важно! Я использую инструмент рефакторинга для поиска версии System.Runtime.dll, это 4.1.1.1 не 4.3 и затем добавьте bindingRedirect в.config

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

Перед запуском модульных тестов просто удалите теги времени выполнения из файла app.config. Проблема будет решена.

Мы обнаружили, что AutoGenerateBindingRedirects может быть причиной этой проблемы.

Наблюдаемый: тот же самый проект, нацеливающийся net45 а также netstandard1.5 был успешно собран на одной машине и не смог собрать на другой. На машинах были установлены разные версии фреймворка (4.6.1 - успех и 4.7.1 - сбой). После обновления фреймворка на первом компьютере до 4.7.1 сборка также не удалась.

Error Message:
 System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
  ----> System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Auto binding redirects это особенность .net 4.5.1, Всякий раз, когда nuget обнаруживает, что проект транзитивно ссылается на разные версии одной и той же сборки, он автоматически создает файл конфигурации в выходном каталоге, перенаправляя все версии на самую высокую требуемую версию.

В нашем случае это была перепроверка всех версий System.Runtime в Version=4.1.0.0, .net 4.7.1 корабли с 4.3.0.0 версия времени выполнения. Таким образом, привязка перенаправления была привязана к версии, которая не была доступна в современной версии фреймворка.

Проблема была исправлена ​​с отключением перенаправления автоматической привязки для цели 4.5 и оставлением только для ядра.net.

<PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
  <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>

В моем случае я просто удалил весь контент в packages папку в корневом каталоге решения.

Я пытался добавить ссылку на .NET Core 3.1 Class Library проект к решению, имеющему ASP.NET 4.6.1проект. Затем я начал получать ту же ошибку, за исключением версии: Could not load file or assembly 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

У меня была проблема с этим в проекте NUnit 2.6.4, нацеленном на среду dotnet 4.6.2. Я столкнулся с этим System.Runtime FileNotFound ошибка при попытке использовать Humanizer.

Я исправил свою ошибку, установив NetStandard.Library в мой проект модульного тестирования.

Впервые столкнулся с этим в проекте Unit Test после добавления MsTest V2 через Nuget. Переименование app.config (так эффективно удалив его) помогло мне.

Прочитав все вышеупомянутые посты, я до сих пор не уверен, почему, извините!

Я попробовал все решения здесь, но безрезультатно. В конце концов я решил эту проблему, открыв новый файл csproj и вручную добавив следующий раздел:

<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
</Reference>

У меня был проект с той же проблемой, я решил ее, изменив версию ядра dotnet с 2.2 на 2.0. Если проблема осталась, попробуйте это решение.

Я несколько раз оказывался в этой ситуации с моим веб-сайтом.NET 4.6.1. Я создавал проблему каждый раз, когда добавлял ссылку на отдельный проект.NET Core. После сборки Visual Studio правильно предупредила меня, что такие межфреймовые ссылки недействительны, и я быстро удалил ссылку на проект. После этого проект работал нормально, но при доступе к веб-сайту возникла ошибка System.Runtime, и он отказался уходить.

Исправление каждый раз было неэффективным, но эффективным: я удалил каталог проекта и снова загрузил его из системы контроля версий. Несмотря на то, что не было никакой разницы между до и после, я смог построить проект и получить доступ к странице без жалоб.

Я исправил проблему, удалив пакет Nuget System.Runtime а затем переустановить его

У меня была та же проблема с закрытием и повторным открытием проекта, которая устранила проблему для меня.

У меня была похожая проблема в VS 2017 15.45 - я обнаружил, когда проверил, что, хотя проект компилировался и запускался, он обнаружил исключение system.IO.FileNotFoundException в отношении System.Runtime при попытке доступа к объектам потока данных TPL.

Когда я проверял проекты в решении, в одном из них (верхнем) отсутствовал пакет System.Runtime, используемый базовыми проектами. Как только я установил его из Nuget, все заработало правильно.

Я использую ASP.Net CORE 2.1, и я получил эту ошибку, когда бежал, выбрав.csproj из списка около 40 в большом репо. Когда я открыл файл csproj по отдельности, ошибка была устранена. Что-то с тем, как была запущена программа, отличалось при открытии csproj.

Я решил эту проблему, переключившись с.NET 4.7.2 => .NET 4.5.2, а затем вернувшись к 472. Поэтому в некоторых случаях эта ошибка возникает из-за того, что диспетчер пакетов не может разрешить зависимости.

У меня возникла эта ошибка при создании функции Azure (с триггером очереди, если это имеет значение)

Проблема в этом случае заключалась в том, что AzureFunctionsVersionбыл установлен на v2 вместо v3. Чтобы обновить его через VS2019, выгрузите проект и отредактируйте файл csproj. В рамкахPropertyGroup node добавьте / отредактируйте следующее:

<PropertyGroup>
  <AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>

Если он работал ранее, то должно быть изменение App.config. У меня сработало Undo App.config.

Я также прошел через эту ошибку и рассказываю, как я избавился от нее.

В моем случае строка ниже существовала в web.config проекта webapi, но в файле package.config не было ссылки на пакет.

Код в Web.config в проекте Webapi

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

Код, который я добавил в файл packages.config в проекте веб-API Перед закрытием элемента.

<package id="System.Runtime" version="4.3.0" targetFramework="net461" />

В моем случае сработало другое решение:

Другой вариант Sure, который может сработать, если вы скопировали проект в другую компьютерную систему, которая может иметь немного разные версии пакетов, поэтому вы можете попробовать изменить версию сборки на версию, указанную по ошибке на веб-сайте / webapi при ее запуске. Как и в этом случае, как указано в вопросе, необходимая версия - '4.1.0.0', поэтому просто попробуйте изменить текущую версию в web.config на версию, показанную с ошибкой, как показано ниже

Ошибка:

Could not load file or assembly 'System.Runtime, Version=4.1.0.0' or one of its dependencies

Для меня это был отсутствующий файл web.config. После добавления его в каталог развернутого проекта в приложении asp net core 3.1 проблема была решена.

Другие вопросы по тегам