Подтвердить что ты не робот

Не удалось загрузить файл или сборку "System.Net.Http

В моем диагностическом представлении мой вывод сборки показывает этот конфликт

Был конфликт между "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" и "System.Net.Http, Version = 4.1.1.2, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a". (TaskId: 20) "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" выбрана потому, что она была первичной и "System.Net.Http, Version = 4.1.1.2, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a "не было. (TaskId: 20) Ссылки, которые зависят от "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.6.1\System.Net.Http.dll]. (TaskId: 20)

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

4b9b3361

Ответ 1

Установка пакета Nuget: System.Net.Http version 4.3.3 устанавливает правильную версию = 4.1.1.2

это приведет к следующей ссылке в файле проекта:

<Reference Include="System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\..\..\..\packages\System.Net.Http.4.3.3\lib\net46\System.Net.Http.dll</HintPath>
</Reference>

Ответ 2

Если вы используете vs2017, некоторый проект заставит u ссылаться на system.net.http(4.2.0.0). Когда вы устанавливаете из nuget (версия 4.3.3), а ваш system.net.http будет 4.1.1.2

→ Это будет конфликт

Таким образом, в вашем файле web.config или app.config вы можете перейти к 4.1.1.2 или 4.2.0.0, зависит от того, какая версия была скопирована в папку bin во время выполнения

<dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.1.1.2" />
      </dependentAssembly>

Ответ 3

Я использую .NET Framework 4.7.2 и Visual Studio 15.5. Когда я обновил System.Net.Http 4.3.3 до 4.3.4, я получил сообщение об ошибке "Не удалось загрузить":

{"Не удалось загрузить файл или сборку" System.Net.Http, версия = 4.2.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или один из ее зависимостей. Система не может найти файл указано. ":" System.Net.Http, версия = 4.2.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a "}

Я получил это только для того, чтобы получить исключение FileNotFoundException:

System.IO.FileNotFoundException HResult = 0x80070002 Сообщение = Возможно не загружается файл или сборка 'System.Net.Http, версия = 4.2.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или один из ее зависимостей. Система не может найти указанный файл.

В этой теме в проекте .NET Core на GitHub обсуждается эта проблема, и я нашел этот пост в проекте .NET Core на GitHub очень полезным:

https://github.com/dotnet/corefx/issues/25773#issuecomment-350036434

Мое (плохое) резюме: Microsoft пытается устранить необходимость в пакете System.Net.Http NuGet, поскольку это был обходной путь для других проблем с выпуском. .NET Framework 4.7.1 и VS 15.5 содержат изменения, которые (должны?) полностью исключают необходимость в нем и связанные с ним привязки.

Я удалил System.Net.Http пакет NuGet из своих проектов и добавил ссылки на System.Net.Http, включенную в .NET Framework 4.7.2. и все снова в форме корабля.

Ответ 4

Основная причина: Обычно такая проблема возникает, когда вы берете ссылку на определенную стороннюю библиотеку в своем приложении.

Например, вы взяли ссылку на RestSharp (сторонняя библиотека) от NuGet. Этот RestSharp, возможно, использовал ссылку версии System.Net.Http 4.2.0.0. И ваш проект также взял ссылку на System.Net.Http 4.0.0.0 (Из GAC). Теперь, когда вы запускаете приложение & попробуйте вызвать любой метод, который использует RestSharp, в то же время Runtime (CLR) пытается найти сборку System.Net.Http с версией 4.2.0.0 & когда не удается найти нужную версию, выдается исключение System.IO.FileNotFoundException с сообщением об ошибке ниже.

Не удалось загрузить файл или сборку 'System.Net.Http, версия = 4.2.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или один из ее зависимостей. Система не может найти указанный файл.

Здесь вы можете увидеть Как среда выполнения находит сборки?

Решение: Просто добавьте приведенную ниже конфигурацию в web.config или app.config вашего начального проекта.

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

Эта конфигурация указывает среде выполнения разрешать сборку System.Net.Http только с версией 4.0.0.0 всякий раз, когда она ищет эту сборку для любой версии от 0.0.0.0 до 4.2.0.0.

Вот полная схема:

<configuration>  
   <runtime>  
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
        <dependentAssembly>
            <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
      </assemblyBinding>  
   </runtime>  
</configuration> 

Ответ 5

Библиотеки system.net.http теперь распространяются как часть .Net Standard Framework, и это может вызвать проблемы, как правило, когда вы обновляете пакет Nuget до более новой версии.

Решение, которое сработало для меня, состояло в том, чтобы удалить пакет System.Net.Http (и зависящий от него пакет Formatters) из Nuget и удалить все ссылки на библиотеки system.net.http в app.config (они часто быть зависимыми ассамблеями).

Наконец, отредактируйте файл своего проекта, чтобы добавить ссылку на http из фреймворка следующим образом:

enter image description here

Ответ 6

После обновления с 4.6.1 Framework до 4.7.2 мы начали получать эту ошибку, и окончательное решение было перейти к файлу веб-конфигурации, найти это:

  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
  </dependentAssembly>

и замените его на

  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>

и сделанные выше изменения были следующими: newVersion = "4.0.0.0"