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

Не удалось загрузить файл или сборку "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a"

Я скопировал свой проект на чистую машину Windows 10 с установленным только сообществом Visual Studio 2015 и SQL Server 2016 Express. Других версий рамок не установлены, кроме тех, которые установлены в Windows 10 и VS2015 или SQL Server.

Когда я пытаюсь запустить проект WebApi, я получаю сообщение:

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

Пакеты проектов включают:

<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />

После создания проекта с .NET Framework 4.6.1, System.Net.Http файл не найден в папке bin.

Путь к файлу указывает на:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.6.1\System.Net.Http.dll

Путь к файлу System.Net.Http.Formatting указывает на:

C:\Разработка\MyApp\пакеты\Microsoft.AspNet.WebApi.Client.5.2.3\Lib\net45\System.Net.Http.Formatting.dll

Должен ли целевой объект цели 4.5.1 целиком или существует другой способ ссылки на правильные сборки?

4b9b3361

Ответ 1

Изменение информации привязки в моем web.config(или app.config) - в то время как "взломать" в моем представлении позволяет вам продвигаться вперед с вашим проектом после обновления пакета NuGet, который удаляет ваше приложение и дает вам Систему. Ошибка Net.Http.

Установить newVersion = "4.0.0.0"

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

Ответ 2

Выполните следующие шаги,

  1. Обновите visual studio до последней версии (это важно)
  2. Удалить все перенаправления привязки из web.config
  3. Добавьте это в файл .csproj:

    <PropertyGroup>
      <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
      <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
    
  4. Постройте проект
  5. В папке bin должен быть файл (WebAppName).dll.config
  6. В нем должны быть перенаправления, скопируйте их в web.config
  7. Удалите вышеприведенный .csproj файла .csproj

Он должен работать

Ответ 3

В одном из моих проектов были nuget-пакеты с более высокой версией System.Net.Http. и в моем проекте запуска там ссылка на System.Net.Http v 4.0.0, я просто установил System.Net.Http nuget package в мой стартап проект и проблема решена

Ответ 4

Изменить следующее:

<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />

со следующим:

<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.0.0.0" />

в web.config

Ответ 5

Если в вашем решении есть несколько проектов, щелкните правой кнопкой мыши значок решения в Visual Studio и выберите "Управление пакетами NuGet для решения", затем нажмите четвертую вкладку "Консолидация", чтобы объединить все ваши проекты в одну и ту же версию библиотеки DLL. Это даст вам список ссылочных сборок для консолидации. Нажмите на каждый элемент в списке, затем нажмите "Установить" на вкладке, которая появляется справа.

Ответ 6

Вышеуказанное bind-redirect у меня не сработало, поэтому я закомментировал ссылку на System.Net.Http в web.config. Кажется, все работает нормально без этого.

  <system.web>
    <compilation debug="true" targetFramework="4.7.2">
      <assemblies>
        <!--<add assembly="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />-->
        <add assembly="System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
      </assemblies>
    </compilation>
    <customErrors mode="Off" />
    <httpRuntime targetFramework="4.7.2" />
  </system.web>

Ответ 7

Вы можете исправить это, обновив свой проект до .NET Framework 4.7.2. На это ответил Алекс Гиондеа - MSFT. Пожалуйста, проголосуйте за него, он действительно этого заслуживает!

Это задокументировано как известная проблема в .NET Framework 4.7.1.

В качестве обходного пути вы можете добавить эти цели в свой проект. Они удалят DesignFacadesToFilter из списка ссылок, переданных SGEN (и добавят их обратно, как только SGEN будет сделан)

<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
  <ItemGroup>
    <DesignFacadesToFilter Include="System.IO.Compression.ZipFile" />
    <_FilterOutFromReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" 
        Condition="'@(DesignFacadesToFilter)' == '@(_DesignTimeFacadeAssemblies_Names)' and '%(Identity)' != ''" /> 
    <ReferencePath Remove="@(_FilterOutFromReferencePath)" />
  </ItemGroup>
  <Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." /> </Target>

<Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies">
  <ItemGroup>
    <ReferencePath Include="@(_FilterOutFromReferencePath)" />
  </ItemGroup>
  <Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has ran." />
</Target>

Другой вариант (для всей машины) заключается в добавлении следующего перенаправления привязки в sgen.exe.config:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.IO.Compression.ZipFile" publicKeyToken="b77a5c561934e089" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime> This will only work on machines with .NET Framework 4.7.1. installed. Once .NET Framework 4.7.2 is installed on that machine, this workaround should be removed.

Ответ 8

У меня есть одна и та же проблема, и только так, как я могу ее исправить, добавьте bindingRedirect в app.confing, как написано @tripletdad99.

Но если у вас есть решение с большим количеством проектов, это действительно suck обновить каждый проект вручную (а также иногда после обновления некоторого пакета nuget вам нужно сделать это снова). И это причина, почему я написал простую powershell script, которая, если все app.configs.

 param(
    [string]$SourceDirectory,
    [string]$Package,
    [string]$OldVersion,
    [string]$NewVersion
)

Write-Host "Start fixing app.config in $sourceDirectory"
Write-Host "$Package set oldVersion to $OldVersion and newVersion $NewVersion"
Write-Host "Search app.config files.."
[array]$files = get-childitem $sourceDirectory -Include app.config App.config -Recurse | select -expand FullName
foreach ($file in $files)
{
    Write-Host $file
    $xml = [xml](Get-Content $file)
    $daNodes = $xml.configuration.runtime.assemblyBinding.dependentAssembly
    foreach($node in $daNodes)
    {
        if($node.assemblyIdentity.name -eq $package)
        {
            $updateNode = $node.bindingRedirect
            $updateNode.oldVersion = $OldVersion
            $updateNode.newVersion =$NewVersion
            Write-Host "Fix"
        }
    }
    $xml.Save($file)
}

Write-Host "Done"

Пример использования:

./scripts/FixAppConfig.ps1 -SourceDirectory "C:\project-folder" -Package "System.Net.Http" -OldVersion "0.0.0.0-4.3.2.0" -NewVersion "4.0.0.0"

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

Ответ 9

Это будет работать в .NET 4.7.2 с Visual Studio 2017 (15.9.4):

  • Удалите перенаправления привязки web/app.config
  • Удалить пакет NuGet для System.Net.Http
  • Откройте "Добавить новую ссылку" и напрямую создайте ссылку на новую сборку 4.2.0.0, которая поставляется с .NET 4.7.2

![image](https://user-images.githubusercontent.com/38843378/50998531-b5bb3a00-14f5-11e9-92df-6c590c469349.png)

Ответ 10

У меня было это, но это было потому, что я добавил пакет NuGet, который обновил переадресацию привязки. Как только я удалил пакет, перенаправления все еще были. Я удалил все из них, а затем выполнил update-package -reinstall. Это добавило правильные переадресации.

Ответ 11

Проверьте версию .net framework.
Моя исходная .net-структура - более старая версия.
После того, как я установил .NET Framework 4.6, эта проблема будет автоматически решена.

Ответ 12

Для меня я настроил свой проект на работу с последней версией .Net Framework (изменение с .Net Framework 4.6.1 на 4.7.2).

Все работало, без ошибок и публиковалось без проблем, и только случайно я наткнулся на сообщение об ошибке System.Net.Http, отображаемое в небольшом, трудно заметном, но довольно важном API-запросе к веб-сайту, на котором я находился ". Я работаю над.

Я откатился на 4.6.1 и все снова нормально.

Ответ 13

Единственный способ, который чисто решил эту проблему для меня (.NET 4.6.1), это не только добавить ссылку Nuget на System.Net.Http V4.3.4 для проекта, который фактически использовал System.Net.Http, но и на проект запуска (тестовый проект в моем случае).

(Что странно, поскольку в каталоге bin тестового проекта существовал правильный файл System.Net.Http.dll, а сборка Bingings.config тоже выглядела нормально.)