Не удалось загрузить файл или сборку System.Net.Http.Primitives. Расположенное определение манифеста сборки не соответствует ссылке на сборку

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

Не удалось загрузить файл или сборку "System.Net.Http.Primitives, Version = 1.5.0.0, Culture = neutral, PublicKeyToken = b03f5f711d50a3a" или одну из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку.

Я использую Visual Studio 2012 express. Я пробовал эту ссылку и просмотрел многие форумы, но никто не работает. Основная проблема, похоже, исходит из файла DLL "Google.Apis.dll" , на который я ссылался, и ссылается на System.Net.Http.Primitives v1.5.0.0. Однако версия моих программных ссылок - 2.2.13.0. Я попытался использовать ссылку на программу v1.5.0.0 (мне удалось найти DLL вместе с исходным кодом Google.Apis), но это только вызвало еще одну проблему, в которой мне понадобилась более новая версия System.Net. Http.Primitives.

Я пытаюсь найти способ обойти это, но я не могу найти ничего, что сработает. Спасибо за время.

Ответ 1

Я столкнулся с той же проблемой с API Google. Основная проблема здесь заключается в том, что если вы устанавливаете клиентские библиотеки Microsoft Http, она помещает в ваш проект обновленную версию DLL System.Net.Http.Primitives. Web.config предполагает, что вы по-прежнему используете стандартную версию 1.5. Чтобы исправить это, необходимо выполнить две вещи:

Первым: Обновление до последних версий API-интерфейсов Google API и Microsoft Http. Вы можете установить обновления через NuGet. Щелкните правой кнопкой мыши на своем веб-сайте, нажмите "Управление пакетами NuGet", выберите "Обновления слева". Во время этого сообщения некоторые из API Google являются только предварительными. Вы можете установить их через NuGet, выбрав "включить предварительную проверку" в левом верхнем углу экрана обновления.

Второй Обновите/добавьте зависимую сборку в свой web.config. Для этого вам нужно узнать версию установленной System.Net.HTTP.Primitives.dll. Просмотрите каталог bin в проводнике Windows. Найдите System.Net.HTTP.Primitives.dll, щелкните его правой кнопкой мыши, выберите свойства и перейдите на вкладку "Подробности". Обратите внимание на версию, расположенную там. Во время этого сообщения мое было 4.0.10.0.

Затем добавьте/обновите раздел dependAssembly для правильной версии.

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

Ответ 2

Что сработало для меня, так это просто установить "Библиотеки клиентов Microsoft Http" из Nuget.

Ответ 3

Добавьте в свой web.config(app.config) следующий текст:

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

Ответ 4

Для меня это работало следующим образом:

В Visual Studio (2012) > Инструменты > Диспетчер пакетов Nuget > Консоль диспетчера пакетов. В верхней части консоли менеджера пакетов у меня есть Источник пакета: nuget.org Проект по умолчанию: проект, который требует System.Net.Http.Primitives Наблюдая внутри файла проекта (yourproject.csproj) с редактором, я читаю, какая версия нужна (в моем случае это Microsoft.Net.Http.2.2.28)

Итак, я пошел в https://www.nuget.org/packages/Microsoft.Net.Http/, и я нажал на свою версию в разделе "История версий" (прокрутите страницу немного, см. его). Выбрав версию, вы скопируете предложенную команду - в моем случае это было:

Установочный пакет Microsoft.Net.Http -Version 2.2.28

но если вам нужна последняя версия, это просто:

Установочный пакет Microsoft.Net.Http

и вы вставляете его в консоль диспетчера пакетов Visual Studio, ранее открытую, как я описал ранее. Выполните команду.

В проекте по ссылкам обновляется System.Net.Http.Primitives.

Ответ 5

У меня была аналогичная проблема.

Попробуйте обновить nuget (инструменты/расширения и обновления...) Решил, что и некоторые другие проблемы для меня.

/Jonas

Ответ 6

У нас была аналогичная проблема. Но в моем случае решение о модификации app.config от Paul не сработало. Причина в том, что я использую его как плагин внутри другого приложения. Поэтому он рассматривает файл конфигурации приложения. Таким образом, мы получили код Google api от GitHub и создали библиотеку Google.Apis.Core после удаления зависимости System.Net.Http.Primitives. Затем мы использовали эту DLL, которая решила нашу проблему.

Ответ 7

Вышеприведенный ответ о сборке является правильным, но вы НЕ должны касаться machine.config.

Абонентский сбор должен быть установлен в файле конфигурации всех EXECUTABLE сборок вашего проекта (.exe.config), которые ссылаются на вашу библиотеку, а не в сборках библиотек (.dll.config)

Ответ 8

Я столкнулся с этой проблемой, когда выпустил свой код, который использует Google.Apis.Drive.v2 (v1.9.2.1860) для компании, в которой я работаю. Я дал им exe и все DLL, созданные Visual Studio (и NuGet), и они получили ошибку. Я никогда не получал ошибку.

Исправить было легко (как только я понял): при установке api из Nuget файл "assemblyname.exe.config" автоматически создается в папке вывода (aka, Debug или Release). Все, что вам нужно сделать, это включить этот файл, когда вы запускаете сборку где-то, кроме папки, в которой она была сгенерирована. Вот код для этого файла для меня:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.29.0" newVersion="4.2.29.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Это в основном ПО "второе" исправление, но оно автоматически генерируется менеджером пакетов. Проблема для меня была, когда я попробовал его "первое" исправление, обновив ее до Google.Apis.Auth и Google.Apis.Core(v1.9.3), что усугубило ситуацию. Я получил бы ту же ошибку, за исключением того, что теперь для "Google.Apis.Core" была неправильная версия (хотя, вероятно, она также могла быть решена путем включения того же файла .exe.config.)

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

Изменить: забыл упомянуть, это относится к консольному приложению, предназначенному для .NET 4.5. Некоторые из них, вероятно, по-прежнему актуальны для других целей .NET или ASP.NET, но я точно не знаю. Ваш пробег может отличаться.

Ответ 9

Как-то популярный ответ Пол Лемке не работал на меня. Проект представляет собой приложение веб-форм, которое начинается с .net v 2.0 и обновлено до версии .net версии 4.5

Я обновил пакеты и nuget создал правильные зависимые_ссылки/привязкиRedirects.

В соответствии с некоторыми комментариями, вероятно, не самая лучшая идея - изменить локальный файл machine.config.

По-видимому, у меня был атрибут в файле web.config, который заставлял приложение игнорировать привязку ссылок.

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

Я удалил этот атрибут xmlns и начал работать.

Ответ 10

Удалось решить это довольно легко. Просто открыл диспетчер пакетов Nuget и обновил пакет клиентской библиотеки Microsoft ASP.NET Web API 2.2. Этот обновленный Microsoft.Net.Http для новейшей версии, который разрешил проблему с сборкой System.Net.Http.Primitives, быть в состоянии быть расположенным. Надеюсь, это поможет!

Ответ 11

В моем случае я ссылался на пакеты NuGet из библиотеки классов. NuGet не сообщает нам, что библиотека классов app.config полностью игнорируется, и мы должны вручную скопировать ее содержимое в .exe app.config.

Ответ 12

NuGet внесла следующее изменение в Web.Config

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

к

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

Это происходило после установки и последующего удаления (с помощью контроля версий) этого пакета https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/

Ответ 13

У меня была аналогичная проблема с сценариями PowerShell для TFS 2017. Сценарии, называемые .NET-кодом, для выполнения пользовательских действий во время процессов сборки. Я продолжал получать ошибки о конфликтах версий dll.

Мне не удалось решить проблему до тех пор, пока я не выполнил привязку к событию AppDomain AssemblyResolve в соответствии с этим ответом: Выполнение переадресации связывания для офисных надстроек

Это решение заставило процесс использовать dll из текущего пути. Я знаю, что это что-то вроде взлома, но я читал, что при запуске PowerShell вы не всегда можете использовать переадресацию привязки, из чего я изначально мог попытаться: https://github.com/google/google-api-dotnet-client/issues/555

Ответ 14

Установочный пакет Microsoft.Net.Http -Version 2.2.22

Эта версия имеет этот dll\packages\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Extensions.dll

Ответ 15

В моем случае Nuget автоматически добавляет следующее в web.config

<runtime xmlns="">
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.2.22.0" newVersion="2.2.22.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.1.10.0" newVersion="2.1.10.0" />
  </dependentAssembly>
</assemblyBinding>

Но я все еще получил сообщение об ошибке выше, наконец, понял. Скопировать эти теги в файл machine.config, расположенный в папке C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config.

Чтобы найти тег "runtime" на machine.config, замените или добавьте (если нет такого тега), это ваши теги из вашего web.config(те, которые перечислены выше).