Ich arbeite an einem Programm, das die Google-API verwendet. Jedes Mal, wenn ich mein Programm starte, wird der folgende Fehler angezeigt:
Datei oder Assembly 'System.Net.Http.Primitives, Version = 1.5.0.0, Culture = neutral, PublicKeyToken = b03f5f711d50a3a' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein.
Ich verwende Visual Studio 2012 Express. Ich habe versucht, diesem Link zu folgen und habe viele Foren durchgesehen, aber keines scheint zu funktionieren. Das Hauptproblem scheint von der DLL-Datei "Google.Apis.dll" zu stammen, auf die ich verwiesen habe, und sie verweist auf System.Net.Http.Primitives v1.5.0.0. Die Version, auf die mein Programm verweist, ist jedoch 2.2.13.0. Ich habe versucht, stattdessen die Programmreferenz v1.5.0.0 zu verwenden (ich finde die DLL zusammen mit dem Quellcode von Google.Apis), dies verursachte jedoch nur ein weiteres Problem, bei dem ich eine neuere Version von System.Net benötigte. Http.Primitives.
Ich habe versucht, einen Weg zu finden, um dies zu umgehen, aber ich kann anscheinend nichts finden, was funktioniert. Danke für die Zeit.
Antworten:
Ich bin auf dasselbe Problem mit den Google-APIs gestoßen. Das Hauptproblem hierbei ist, wenn Sie die Microsoft Http Client Libraries installieren, die in Ihrem Projekt eine aktualisierte Version der System.Net.Http.Primitives DLL enthalten. In der web.config wird davon ausgegangen, dass Sie weiterhin die Standardversion von 1.5 verwenden. Es müssen zwei Dinge passieren, um das Problem zu beheben:
Erstens: Aktualisieren Sie auf die neuesten Versionen von Google API und Microsoft Http Client Libraries . Sie können die Updates über NuGet installieren. Klicken Sie mit der rechten Maustaste auf Ihre Website, klicken Sie auf "NuGet-Pakete verwalten" und wählen Sie links "Updates" aus. Zum Zeitpunkt dieses Beitrags sind einige der Google-APIs nur vorab verfügbar. Sie können sie über NuGet installieren, indem Sie oben links im Update-Bildschirm "Prerelease einschließen" auswählen.
Zweites Update / Hinzufügen einer abhängigen Baugruppe zu Ihrer web.config. Dazu müssen Sie die Version der installierten System.Net.HTTP.Primitives.dll kennen. Suchen Sie in Ihrem bin-Verzeichnis im Windows Explorer. Suchen Sie System.Net.HTTP.Primitives.dll, klicken Sie mit der rechten Maustaste darauf, wählen Sie Eigenschaften aus und klicken Sie auf die Registerkarte "Details". Beachten Sie die dort befindliche Version. Zum Zeitpunkt dieses Beitrags war meins 4.0.10.0 .
Fügen Sie dann einen abhängigen Assembly-Abschnitt für die richtige Version hinzu / aktualisieren Sie ihn.
quelle
Was für mich funktioniert hat, war einfach die "Microsoft Http Client Libraries" von Nuget zu installieren.
quelle
Fügen Sie Ihrer web.config (app.config) Folgendes hinzu:
quelle
Bei mir hat es folgendes geklappt:
In Visual Studio (2012)> Tools> Nuget Package Manager> Package Manager-Konsole. Über der Paket-Manager-Konsole befindet sich die Paketquelle: nuget.org Standardprojekt: Das Projekt, für das System.Net.Http.Primitives erforderlich ist. In der Projektdatei (yourproject.csproj) mit einem Editor beobachten, welche Version benötigt wird (in mein Fall war Microsoft.Net.Http.2.2.28)
Also ging ich zu https://www.nuget.org/packages/Microsoft.Net.Http/ und klickte unter "Versionsverlauf" auf meine Version (scrollen Sie ein wenig auf der Seite, wenn Sie sie nicht sehen). Nachdem Sie die Version ausgewählt haben, kopieren Sie den vorgeschlagenen Befehl - in meinem Fall war es:
Installationspaket Microsoft.Net.Http -Version 2.2.28
Wenn Sie jedoch die neueste Version benötigen, ist dies genau das Folgende:
Installationspaket Microsoft.Net.Http
und Sie fügen es in Ihre Visual Studio Package Manager-Konsole ein, die zuvor wie zuvor beschrieben geöffnet wurde. Führen Sie den Befehl aus.
Im Projekt unter den Referenzen wird System.Net.Http.Primitives jetzt aktualisiert.
quelle
Ich hatte ein ähnliches Problem.
Versuchen Sie, Nuget zu aktualisieren (Tools / Erweiterungen und Updates ...). Das und einige andere Probleme wurden für mich behoben.
/ Jonas
quelle
Wir hatten das ähnliche Problem. Aber in meinem Fall hat die Lösung, die app.config von Paul zu ändern, nicht funktioniert. Der Grund ist, dass ich es als Plugin in einer anderen Anwendung verwende. Daher wird die Konfigurationsdatei dieser Anwendung berücksichtigt. Also haben wir den Google API-Code von GitHub erhalten und die Google.Apis.Core-Bibliothek erstellt, nachdem wir die Abhängigkeit von System.Net.Http.Primitives entfernt haben. Dann haben wir diese DLL verwendet, die unser Problem gelöst hat.
quelle
Dieses Problem trat auf, als ich meinen Code, der Google.Apis.Drive.v2 (v1.9.2.1860) verwendet, für das Unternehmen veröffentlichte, für das ich arbeite. Ich habe ihnen die Exe und alle DLLs gegeben, die Visual Studio (und NuGet) generiert haben, und sie haben den Fehler erhalten. Ich habe den Fehler nie bekommen.
Das Update war einfach (nachdem ich es herausgefunden hatte): Bei der Installation der API von Nuget wird die Datei 'assemblyname.exe.config' automatisch im Ausgabeordner (auch bekannt als Debug oder Release) generiert. Alles, was Sie tun müssen, ist, diese Datei einzuschließen, wenn Sie die Assembly an einem anderen Ort als dem Ordner ausführen, für den sie generiert wurde. Hier ist der Code für diese Datei für mich:
Dies ist im Grunde Pauls "zweiter" Fix, der jedoch automatisch vom Paketmanager generiert wird. Das Problem für mich war, als ich versuchte, sein "erstes" Update durch Aktualisierung auf Google.Apis.Auth und Google.Apis.Core (v1.9.3) durchzuführen, was die Sache noch schlimmer machte. Ich würde den gleichen Fehler erhalten, außer dass jetzt "Google.Apis.Core" die falsche Version war (obwohl dies wahrscheinlich auch durch Einfügen derselben .exe.config-Datei hätte behoben werden können.)
Ich hoffe, das hilft jemandem. Ich weiß, dass dieser Thread ziemlich alt ist, aber es ist derjenige, zu dem mich eine schnelle Google-Suche geführt hat.
Bearbeiten: Ich habe vergessen zu erwähnen, dass dies für eine Konsolenanwendung relevant ist, die auf .NET 4.5 abzielt. Einiges davon ist wahrscheinlich noch für andere .NET-Ziele oder ASP.NET relevant, aber ich weiß es nicht genau. Ihr Kilometerstand kann variieren.
quelle
Die obige Antwort zur Baugruppenbindung ist korrekt, Sie sollten jedoch NICHT die Datei machine.config berühren.
Die Assemblybindung muss in der Konfigurationsdatei aller EXECUTABLE-Assemblys Ihres Projekts (.exe.config) festgelegt werden, die auf Ihre Bibliothek verweisen, und nicht in den Bibliotheksassemblys (.dll.config).
quelle
Irgendwie hat die beliebte Antwort von Paul Lemke bei mir nicht funktioniert. Das Projekt ist eine Webforms-Anwendung, die mit .net v 2.0 gestartet und auf .net Version 4.5 aktualisiert wurde
Ich habe die Pakete aktualisiert und Nuget hat die richtigen abhängigen Assembly / BindingRedirects erstellt.
Nach einigen Kommentaren ist es wahrscheinlich nicht die beste Idee, die lokale Datei machine.config zu ändern.
Anscheinend hatte ich ein Attribut in meiner web.config-Datei, das dazu führte, dass die App die BindingRedirects ignorierte.
Ich habe dieses xmlns-Attribut entfernt und es hat funktioniert.
quelle
Konnte dies ziemlich leicht lösen. Öffnen Sie einfach den Nuget Package Manager und aktualisieren Sie das Microsoft ASP.NET Web API 2.2-Clientbibliothekspaket. Dadurch wurde Microsoft.Net.Http auf die neueste Version aktualisiert, wodurch das Problem behoben wurde, dass die System.Net.Http.Primitives-Assembly nicht gefunden werden konnte. Hoffe das hilft!
quelle
In meinem Fall habe ich auf die NuGet-Pakete aus einer Klassenbibliothek verwiesen. NuGet informiert uns nicht darüber, dass die app.config der Klassenbibliothek vollständig ignoriert wird und wir ihren Inhalt manuell in die app.config der EXE-Datei kopieren müssen.
quelle
app.config
? Haben Sie den gesamten Inhalt kopiert?bin\Foo.dll.config
beim Kompilieren in kopiert . Sie sind im XML-Format, so dass man sie normalerweise nicht einfach wörtlich kopieren kann. Sie müssen verglichen und die fehlenden Teile einzeln kopiert werden.NuGet hat die folgende Änderung in Web.Config vorgenommen
<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>
zu
<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>
Dies erfolgte nach der Installation und dem anschließenden Entfernen (durch Zurücksetzen der Versionskontrolle) dieses Pakets https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/
quelle
Ich hatte ein ähnliches Problem mit PowerShell-Skripten für TFS 2017. Die Skripte wurden als .NET-Code bezeichnet, um benutzerdefinierte Aktionen während der Erstellungsprozesse auszuführen. Ich bekam immer wieder Fehler über DLL-Versionskonflikte.
Ich konnte das Problem nicht beheben, bis ich einen Hook in das AppDomain AssemblyResolve-Ereignis implementiert habe, wie in der folgenden Antwort beschrieben: Binden von Weiterleitungen für Office-Add-Ins
Diese Lösung zwang den Prozess, DLLs aus dem aktuellen Pfad zu verwenden. Ich weiß, dass dies ein Hack ist, aber ich hatte gelesen, dass Sie beim Ausführen von PowerShell nicht immer Bindungsumleitungen verwenden können, was ich ursprünglich versucht hatte: https://github.com/google/google-api-dotnet -client / issue / 555
quelle
Installationspaket Microsoft.Net.Http -Version 2.2.22
Diese Version hat die DLL \ packages \ Microsoft.Net.Http.2.2.22 \ lib \ net45 \ System.Net.Http.Extensions.dll
quelle
In meinem Fall fügt Nuget automatisch Folgendes zu web.config hinzu
Aber ich habe immer noch die obige Fehlermeldung erhalten, schließlich finde ich es heraus. Sie müssen diese Tags in die machine.config kopieren Datei sich unter C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config befindet.
Um das Tag "runtime" auf machine.config zu finden, ersetzen oder fügen Sie es (falls es kein solches Tag gibt) durch Ihre Tags aus Ihrer web.config (die oben aufgeführten) hinzu.
quelle