“System.Net.Http, Sürüm = 4.0.0.0, Kültür = nötr, PublicKeyToken = b03f5f7f11d50a3a” dosyası veya montajı yüklenemedi


168

Projemi, yalnızca Visual Studio 2015 Community ve SQL Server 2016 Express yüklü olan temiz bir Windows 10 makinesine kopyaladım. Windows 10 ve VS2015 veya SQL Server ile kurulanların dışında yüklü başka bir çerçeve sürümü yoktur.

WebApi projesini başlatmaya çalıştığımda mesajı alıyorum:

"System.Net.Http, Sürüm = 4.0.0.0, Kültür = nötr, PublicKeyToken = b03f5f7f11d50a3a" veya bağımlılıklarından biri yüklenemedi. Sistem belirtilen dosyayı bulamıyor.

Projenin paketleri şunları içerir:

<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 ile proje oluşturduktan System.Net.Httpsonra dosya binklasörde bulunamadı .

Dosyanın yolu şuna işaret eder:

C: \ Program Dosyaları (x86) \ Başvuru Derlemeleri \ Microsoft \ Framework.NETFramework \ v4.6.1 \ System.Net.Http.dll

Dosyanın System.Net.Http.Formattingişaret ettiği yol :

C: \ Geliştirme \ Uygulamam \ paketler \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib \ net45 \ System.Net.Http.Formatting.dll

Tüm proje 4.5.1'i mi hedeflemeli yoksa doğru meclislere atıfta bulunmanın başka bir yolu var mı?


Web Api'yi NuGet paketinden yeniden yüklemeyi denediniz mi?
Mihai Alexandru-Ionut


Bu SO sorusunda önerilen tüm cevapları denedim. Şimdiye kadar hiçbir şey işe yaramıyor. update-package xxx -reinstallKullandığım tüm nuget paketleri için de koştum . Bu da işe yaramıyor.
Ivan-Mark Debono


Sadece buna bakın, daha sonra bana teşekkür edin stackoverflow.com/questions/50536842/…
Ragul

Yanıtlar:


117

Aşağıdaki adımları izleyin,

  1. Visual Studio'yu en son sürüme güncelleyin (önemli)
  2. Sitesinden tüm ciltleme yönlendirmelerini kaldır web.config
  3. Bunu .csprojdosyaya ekleyin :

    <PropertyGroup>
      <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
      <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
  4. Projeyi derleyin
  5. Gelen binklasöründe bir olmalıdır (WebAppName).dll.configdosya
  6. İçinde yönlendirmeler olmalı, bunları web.config
  7. Yukarıdakileri .csprojdosyadan kaldırın

İşe yaramalı


1
Şimdi im alıyorum Dosya veya montaj 'Newtonsoft.Json, Sürüm = 6.0.0.0, Kültür = nötr, PublicKeyToken = 30ad4fe6b2a6aeed' veya bağımlılıklarından biri yüklenemedi. Konumlandırılan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor. (HRESULT istisnası: 0x80131040)
EK_AllDay

2
Oluşturulan dosyadan bağlayıcı yönlendirmeler arasında kopyalamayı unutmayın, bu nedenle yukarıdaki hatayı ilk kez alacaksınız, ancak yukarıda açıklandığı gibi oluşturulan (webappname) .dll.config dosyasını almak için bin klasörüne gidin, yönlendirme listesinin tamamını kopyalayın web.config'nize ekleyin, ardından yeniden derleyin. Bu gerçekten bana yardımcı oldu, ilk önce yapabildiğiniz kadar çok referansı temizlemek için nuget konsolidasyon aracını kullandığınızdan emin olun.
Chris Schaller

4
İnanılmaz. Bu aslında benim için çalıştı. @EK_AllDay AssemblyRedirects'i orijinal web.config dosyasına geri kopyalamanız gerekir.
David De Sloovere

3
⭐☝ Efsane rozeti burada hak etti! AssemblyRedirects'i tekrar web.config dosyasına kopyaladığımda, bir yan not, artık System.Net.Http için bir bağlanma olmadığını görüyorum . VS'nin şimdi kendi sürümü yerine .Net çerçevesi ile paketlenmiş varsayılan montajı kullandığını varsayıyoruz?
EvilDr

1
Bu cevap beni o kadar çok kurtardı ki saymayı bile bıraktım. IMHO yanıtı olarak işaretlenmelidir.
Sebastian Budka

258

Web.config (veya app.config) dosyamdaki bağlayıcı bilgileri değiştirmek - benim görüşüme göre bir "hack" olurken, bir NuGet paket güncellemesi uygulamanızı çaldığında ve size System.Net.Http verdikten sonra projenizle birlikte ilerlemenizi sağlar. hata.

NewVersion = "4.0.0.0" olarak ayarla

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

4
Azure'a bir kez, hiçbir sorun olmadan, daha sonra 15 dakika sonra konuşlandırdım, ardışık bir dağıtım bana OP'de belirtilen tam hatayı verdi ve bu kesin cevapla sunucudaki web.config ayarını düzeltti sorunumu düzeltti. Ama neden ilk kez çalıştığı hakkında hiçbir fikrim yok. Konuşlandırmalar arasındaki bağımlılıklarımı karıştırmadım.
bkwdesign

8
Aferin. Ne olduğunu görebiliyorum, bir temel etki alanı projesine System.Net.Http nuget'in yüklü olduğundan (muhtemelen daha yüksek 4.1.x sürümü) bir paket yükledim ve bunları alır almaz her yerde uyarılar. Bu, web projesi için sorunu çözdü, ancak yukarıdaki projelerin hepsinde nuget paketine başvurması için tavsiye, tüm uyarıları kaldırdı. Referanslar söz konusu olduğunda eski ve yeni .NET'in karışımı hakkında endişelenen tek kişi ben miyim? Beni genellikle yerel dll nuget paketleri (dll cehennem) olarak başvurmak korkuyor.
Nicholas Petersen

3
Microsoft'un neden doğru yol olduğuna dair cevap: github.com/dotnet/corefx/issues/25773
ghanashyaml

18
Bağlama yönlendirmesini kaldırmak tamamen benim için çalıştı.
sbkrogers

1
Evet, sadece system.net.http ve system.runtime satırlarını kaldırın. O zaman işler iyi olur.
ZZZ

32

Projelerimden birinde, System.Net.Http dosyasının daha yüksek sürümüne sahip bir nuget paketleri vardı. ve benim başlangıç projesinde System.Net.Http v 4.0.0 referans, orada ben sadece yüklü System.Net.Http Nuget paketi benim başlangıç projesinde ve sorun çözüldü


Bir çözüm üç proje var - Hadi diyelim A, Bve C. Abaşlangıç ​​projesidir ve Bveya ile ilgisi yoktur C. Ciçin bir test projesidir B. CBir referans (System.Net.Http) projesi yoktu çünkü testlerimi çalıştırmak başarısız oldu A.
Rasmus Bækgaard

19

Aşağıdakileri değiştir:

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

Takip ederek:

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

web.config içinde


1
Sen bir gangstersin. Bu benim sorunumu çözdü!
Leonardo Wildt

1
Teşekkürler @LeonardoWildt
Muhammad Waqas

12

Çözümünüzde birden fazla proje varsa, Visual Studio'daki çözüm simgesini sağ tıklatın ve 'Çözüm için NuGet Paketlerini Yönet'i seçin, ardından tüm projelerinizi projenin aynı sürümüyle birleştirmek için dördüncü' Konsolidasyon 'sekmesini tıklayın. DLL. Bu, birleştirmek için başvurulan derlemelerin bir listesini verecektir. Listedeki her bir öğeye tıklayın, ardından sağda görünen sekmeden yükle'ye tıklayın.


4
Bunu AutoGenerateBindingRedirects'i kullanma hakkındaki @sajeetharan yanıtıyla birleştirin, VS veya nuget paketlerinin eski sürümlerinin yanlış bağlama ifadeleri bırakabileceği görülüyor. İyi bir temizlik çok yardımcı olabilir.
Chris Schaller

11

Yukarıdaki bağ-yönlendirme benim için çalışmadı bu yüzden System.Net.Httpiçinde referans yorumladı web.config. Her şey onsuz iyi çalışıyor gibi görünüyor.

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

1
Bu, Visual Studio 2017'de (15.9.4) çalışır ve .NET 4.7.2 çerçeve sürümü ile birlikte gelen DLL'ye doğrudan başvuru yerine System.Net.Http (4.3.4) NuGet paketi ile oluşturmanıza olanak tanır. IDE içinde gönderilen referansı (başka bir bağımlılık getirilmeden) kullanmak için şunu yapın: 1) web / app.config bağlayıcı yönlendirmelerini kaldırın 2) System.Net.Http için NuGet paketini kaldırın 3) "Yeni Referans Ekle" yi açın ve doğrudan bağlantı kurun .NET 4.7 ile gelen yeni 4.2.0.0 derlemesine.
EnocNRoll - AnandaGopal Pardue

Bu, 4.6.1'den 4.7.2'ye bir uygulamayı geçirerek VS2019'da benim için çalıştı
cklimowski

Webjob olarak çalışan bir konsol uygulaması projem vardı. SendGrid api istemcisi oluşturulurken bu istisna atıyordu. Her şey, bağlayıcı yeniden yönlendirmeyi app.config dosyasından kaldırdıktan sonra çalışmaya başladı. Bunu önerdiğiniz için teşekkürler, hiç düşünmezdim.
kurdemol94

9

Projenizi .NET Framework 4.7.2'ye yükselterek düzeltebilirsiniz. Bu cevap Alex Ghiondea - MSFT . Lütfen gerçekten hak ettiği için onu oylayın!

Bu, .NET Framework 4.7.1'de bilinen bir sorun olarak belgelenmiştir.

Çözüm olarak bu hedefleri projenize ekleyebilirsiniz. DesignFacadesToFilter'ı SGEN'e gönderilen referanslar listesinden kaldıracaklar (ve SGEN tamamlandıktan sonra bunları geri ekleyecekler)

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

Başka bir seçenek (makine çapında) sgen.exe.config dosyasına aşağıdaki bağlama yönlendirmesini eklemektir:

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

Yukarıdaki bağlantı sorusundaki bu cevap şimdi ilgili cevaptır: stackoverflow.com/a/52883065/54289 Ayrıntılar için yanıtın yorumlarına bakın.
EnocNRoll - AnandaGopal Pardue

6

Bu, Visual Studio 2017 (15.9.4) ile .NET 4.7.2'de çalışacaktır:

  • Web / app.config bağlama yönlendirmelerini kaldırın
  • System.Net.Http için NuGet paketini kaldırın
  • "Yeni Başvuru Ekle" yi açın ve .NET 4.7.2 ile birlikte gelen yeni 4.2.0.0 derlemesine doğrudan bağlantı kurun

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


4

Ben aynı sorunu var ve nasıl düzeltebilirim tek yolu app.confing nasıl @ tripletdad99 yazdı bağlayıcı redirect ekleyin.

Ama eğer daha fazla proje ile çözüm var gerçekten emmek her projeyi elle güncellemek (ve bazen bazı nuget paketini güncelledikten sonra tekrar yapmanız gerekir). Ve neden tüm app.configs basit powershell komut dosyası yazdım nedeni budur.

 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"

Nasıl kullanılacağıyla ilgili örnek:

./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"

Muhtemelen mükemmel değildir ve aynı zamanda birisinin onu ön inşa görevine bağlaması daha iyi olacaktır.


4

4.6.1-2'de VS2017 kullanıcıları, System.Net.Http sürümünün VS2017 veya Msbuild 15 tarafından kullanmak istediği sürümünün istenmeyen değiştirilmesini yaşayabilir.

Bu sürümü burada sildik:

C: \ Program Dosyaları (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ System.Net.Http.dll

ve burada:

C: \ Program Dosyaları (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ System.Net.Http.dll

Ardından proje NuGet aracılığıyla referans verdiğimiz sürümle derleniyor.


1

Bunu yaptım, ancak bunun nedeni, bağlayıcı yönlendirmeleri güncelleyen bir NuGet paketi eklememdi. Paketi kaldırdığımda, yönlendirmeler hala oradaydı. Hepsini kaldırdım ve daha sonra update-package -reinstall komutunu çalıştırdım. Bu, doğru yönlendirmeleri ekledi.


0

Net çerçeve sürümünü kontrol edin.
Orijinal .net çerçevem ​​eski sürüm.
.Net framework 4.6 yüklendikten sonra bu sorun otomatik olarak çözülür.


0

Benim için, projemi .Net Framework'ün (.Net Framework 4.6.1'den 4.7.2'ye bir değişiklik) en son sürümünde çalışacak şekilde ayarlamıştım.

Her şey çalıştı, hatasız ve sorunsuz bir şekilde yayınlandı ve sadece tesadüfen System.Net.Http hata mesajıyla karşılaştım, web sitesi üzerinden küçük, fark edilmesi zor, ancak oldukça önemli bir API isteği ile gösterdim. üzerinde çalışıyorum.

4.6.1'e geri döndüm ve her şey tekrar iyi.


0

Benim için bu sorunu temiz bir şekilde çözmenin tek yolu (.NET 4.6.1), System.Net.Http V4.3.4'e aslında System.Net.Http'yi kullanan proje için bir Nuget referansı eklemek değil, aynı zamanda başlangıç ​​projesi (benim durumumda bir test projesi).

(Bu garip, çünkü test projesinin bin dizininde doğru System.Net.Http.dll vardı ve .config assemblyBingings de Tamam görünüyordu.)


0

Nuget (.Net güncellemesi ve MVC güncellemesi dahil) kullanarak eski bir web sitesini güncelliyor.

VS2017 (2.0.0.0 sürümüne idi) System.Net.HTTP başvurusunu sildim ve daha sonra 4.2.0.0 gösteren başvuruyu yeniden ekledi.

Daha sonra nuget kullanarak bir ton 'paketleri' güncelledim ve hata mesajını aldım, sonra bir şey referansı 2.0.0.0'a sıfırladığını fark ettim, bu yüzden kaldırdım ve tekrar ekledim ve iyi çalışıyor ... tuhaf.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.