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

Я портирую Net Framework 4 DLL на Net Core. При портировании моего проекта модульных тестов я получаю исключение при выполнении некоторых конкретных тестов (не всех).

System.IO.FileLoadException: не удалось загрузить файл или сборку 'System.Net.Http, версия = 4.1.1.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a' или одна из ее зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Это project.json для моей библиотеки

 {
  "version": "1.0.0-*",

  "dependencies": {
    "log4net": "2.0.7",
    "NETStandard.Library": "1.6.1",
    "Newtonsoft.Json": "9.0.1",
    "StackExchange.Redis": "1.2.1"
  },

  "frameworks": {
    "netstandard1.6": {
      "imports": "dnxcore50"
    }
  }
}

И это Packages.config для проекта модульных тестов

<packages>
  <package id="Castle.Core" version="4.0.0" targetFramework="net462" />
  <package id="log4net" version="2.0.7" targetFramework="net462" />
  <package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net462" />
  <package id="Moq" version="4.7.1" targetFramework="net462" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
  <package id="StackExchange.Redis" version="1.2.1" targetFramework="net462" />
  <package id="System.Diagnostics.DiagnosticSource" version="4.0.0" targetFramework="net462" />
  <package id="System.IO" version="4.1.0" targetFramework="net462" />
  <package id="System.IO.FileSystem" version="4.0.1" targetFramework="net462" />
  <package id="System.IO.FileSystem.Primitives" version="4.0.1" targetFramework="net462" />
  <package id="System.IO.FileSystem.Watcher" version="4.0.0" targetFramework="net462" />
  <package id="System.Linq" version="4.1.0" targetFramework="net462" />
  <package id="System.Net.Http" version="4.1.1" targetFramework="net462" />
  <package id="System.Net.NameResolution" version="4.0.0" targetFramework="net462" />
  <package id="System.Runtime" version="4.1.0" targetFramework="net462" />
  <package id="System.Runtime.Extensions" version="4.1.0" targetFramework="net462" />
  <package id="System.Security.Cryptography.Algorithms" version="4.2.0" targetFramework="net462" />
  <package id="System.Security.Cryptography.Encoding" version="4.0.0" targetFramework="net462" />
  <package id="System.Security.Cryptography.Primitives" version="4.0.0" targetFramework="net462" />
  <package id="System.Security.Cryptography.X509Certificates" version="4.1.0" targetFramework="net462" />
  <package id="System.Text.RegularExpressions" version="4.1.0" targetFramework="net462" />
  <package id="System.Threading.Thread" version="4.0.0" targetFramework="net462" />
</packages>

Ответы

Ответ 1

Исправлено, обновив System.Net.Http до 4.3.1

Ответ 2

У меня возникла проблема, и я понял, что это связано с тем, что у меня было две разные ссылки. одна ссылка была из моей библиотеки проектов, а вторая - зависимость .Net Standard library и, следовательно, пакет Nuget. Шаги для решения были следующими:

  • Удалить ссылку на System.Net.Http (project = > add reference = > удалить ссылку).
  • Храните пакеты System.Net и System.Net.Http Nuget
  • Запустите Update-Package –reinstall System.Net.Http, чтобы вернуть ссылку.

Теперь он работает снова.:)

Ответ 3

Моя проблема заключалась в том, что у моей службы была ссылка на сборку, которая ссылалась на более новую версию System.Net.Http. Я решил проблему, обновив System.Net.Http в сервисе.

Ответ 4

У меня была эта проблема, в то время как у меня было 10 проектов, зависящих друг от друга. Я исправил это, добавив версию, которую он попросил, в одном из проектов, от которого зависело. Он не нужен для компиляции, но кажется, что добавив его, исправил версию в других проектах при восстановлении. Так было:

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

Тогда:

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

Итак, я добавил    "System.Net.Http": "4.1.1", в одном проекте..

Это фактически устранило проблему, когда она восстановила 8 проектов.

Ответ 5

Я согласен с Джин. Удалите ссылку на сборку, а затем добавьте новую ссылку через Nuget! Фактическая версия System.Net.Http не имеет значения. После удаления ссылки на сборку все работает нормально, версия 4.3.2

Ответ 6

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

Просто укажите oldVersion как 0.0.0.0-5.0.0.0, а newVersion как 4.1.1.0

Где, например, 4.1.1.0 - это ваша версия.

Ответ 7

А теперь решение для младшего программиста... дважды проверьте, что вы делаете обновления, предложенные Джавеном и Джином в Nuget Package Manager, также в нужных местах. Помните, что у вас может быть решение с вашим проектом и тестовым проектом, поэтому дважды проверьте, чтобы обновить оба набора ссылок.

Ответ 8

Возможно, оффтоп, но моя проблема заключалась в том, что Azure не поддерживал последнюю версию .NET Framework.

Ответ 9

Перейдите в app.config и удалите все строки, которые ссылаются на System.Net.Http.