2013-08-22 10 views
64

Pracuję nad programem korzystającym z interfejsu API Google. Jednak za każdym razem, gdy uruchamiam program, pojawia się następujący błąd:Nie można załadować pliku lub zestawu System.Net.Http.Primitives. Umieszczona w manifeście definicja zespołu nie pasuje do odwołania do zespołu

Could not load file or assembly 'System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f711d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

Używam programu Visual Studio 2012 express. Próbowałem podążać za tym link i przejrzałem wiele forów, ale żaden nie działa. Główny problem wydaje się pochodzić z pliku DLL "Google.Apis.dll", do którego się odwołałem, i odnosi się do System.Net.Http.Primitives v1.5.0.0. Jednak wersja, do której odnoszą się moje programy to 2.2.13.0. Wcześniej próbowałem mieć odniesienie do programu v1.5.0.0 (udało mi się znaleźć bibliotekę dll wraz z kodem źródłowym Google.Apis), ale spowodowało to tylko inny problem, w którym potrzebowałem nowszej wersji System.Net. Http.Primitives.

Próbowałem znaleźć sposób obejścia tego, ale nie mogę znaleźć niczego, co działa. Dziękuję za czas.

+0

http://stackoverflow.com/q/633786/62576 –

+1

Witaj! Gdzie jesteś w stanie rozwiązać ten problem? Mam ten sam problem. Dziękuję Ci! – koffe14

+0

Otrzymałem ten sam komunikat o błędzie dla projektu Web API, chociaż nie korzystałem z Google API. Przebudowa projektu rozwiązała problem. – Hong

Odpowiedz

3

Miałem podobny problem.

Spróbuj zaktualizować nuget (narzędzia/rozszerzenia i aktualizacje ...) Rozwiązałem to i kilka innych problemów dla mnie.

/Jonas

+0

Tri, proszę dać nam znać, jeśli to działa dla ciebie. – peleyal

+0

To było nieprecyzyjne, ale pomocne .. – kstubs

5

dodaj do swojego 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> 
+0

Nie jestem pewien co do wartości zakresu i wartości nowej wersji, moja nowa wartość to: 2.2.29.0 – kstubs

+0

dla mnie, targetowanie .Net 4.5 –

+0

W moim przypadku utworzony przez nas nigret był skierowany w stronę 4.2.29, ale wersja, którą miałem na mojej maszynie była w rzeczywistości 4.2.13 (GAC_MSIL \ System.Net.Http.Primitives) ... kiedy zmieniłem przekierowanie na 4.2.13, zaczęło działać! Nie wiem, dlaczego tak się stało, ale jeśli ktoś próbuje wszelkiego rodzaju obejścia i nadal nie może tego zrobić, warto sprawdzić w GAC i zobaczyć, jaka wersja faktycznie masz. – ysasaki

33

Co pracował dla mnie było po prostu zainstalować "Microsoft klient HTTP Biblioteki" z Nuget.

+0

Jakie przestrzenie nazw używasz po instalacji? Thx – koffe14

+4

To działało dla mnie, gdy dodałem go specjalnie do mojego projektu testowego (w którym działałem przy problemie), niezależnie od tego, że był on już wymieniony w głównym projekcie, który został z kolei powiązany z moim projektem testowym. – keithl8041

+0

Aby to zrobić, musiałem zaktualizować program nuget.exe w naszym rozwiązaniu - http://www.seirer.net/blog/2014/5/20/visual-studio-2013-cant-update-nugetexe – jaminto

68

Wpadłem na ten sam problem z Google API. Głównym problemem jest to, że jeśli zainstalujesz Microsoft Http Client Biblioteki umieszcza w projekcie zaktualizowaną wersję biblioteki System.Net.Http.Primitives. Web.config zakłada, że ​​nadal używasz domyślnej wersji 1.5. Są dwie rzeczy, które muszą się wydarzyć, aby go naprawić:

pierwszy: aktualizację do najnowszej wersji Google API i Microsoft klient HTTP Bibliotek. Możesz zainstalować aktualizacje przez NuGet. Kliknij prawym przyciskiem myszy na swojej stronie, kliknij "Zarządzaj pakietami NuGet", wybierz Aktualizacje po lewej stronie. W chwili publikacji tego postu niektóre interfejsy API Google są wstępnie w wersji wstępnej. Można je zainstalować przez NuGet, wybierając opcję "include prerelease" w lewym górnym rogu ekranu aktualizacji.

Po drugie Zaktualizuj/dodaj zależnyAssembly do swojego pliku web.config. Aby to zrobić, musisz znać wersję pliku System.Net.HTTP.primitives.dll, która została zainstalowana. Zajrzyj do katalogu bin w Eksploratorze Windows. Znajdź plik System.Net.HTTP.Primitives.dll, kliknij go prawym przyciskiem myszy, wybierz właściwości i kliknij kartę "Szczegóły". Zwróć uwagę na zlokalizowaną tam wersję. W czasie tego postu było 4.0.10.0.

Następnie dodaj/zaktualizuj zależną sekcjęAssembly dla poprawnej wersji.

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

+1 Pierwszy krok wystarczył, aby rozwiązać problem dla mnie. – CodingIntrigue

+3

Wystarczy wskazać, że wersja Http.Primitives to "2.2.22.0", a przykładowy kod pokazuje "4.0.10.0". Ale jest to właściwa odpowiedź, należy ją zaakceptować. –

+3

Celem Nuget jest niewymaganie ręcznego składania wiązań w Web.Config. Tęsknię za starym API Google już. Teraz, jeśli rozpowszechniam moją bibliotekę DLL, muszę jakoś powiadomić ich, aby wykonali dwa kroki dla dowolnego projektu, który chce z niego korzystać. – DFTR

-2

W moim przypadku Nuget automatycznie dodaje kolejne do sieci.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> 

Ale nadal mam Powyższy błąd wiadomość, wreszcie mogę zrozumieć. Trzeba skopiować te znaczniki do pliku machine.config znajdującego się w C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config.

Aby znaleźć tag "runtime" na pliku machine.config, zamień lub dodaj (jeśli nie ma takiego tagu) to ze swoimi tagami z twojego web.config (te wymienione powyżej).

+0

Aktualizujesz web.config, a nie plik machine.config. – kstubs

+0

@ flyhorse1999, około rok później, ale spróbuj rozwiązania, które napisałem. Moja aplikacja nie odsłuchała bindingRedirects z powodu atrybutu, który musiałem usunąć. – Vincejtl

1

Powyższa odpowiedź dotycząca montażu jest poprawna, ale NIE należy dotykać pliku machine.config.

assemblybinding należy ustawić w pliku konfiguracyjnym wszystkich zespołów wykonywalny projektu (.exe.config), którzy odwołują swoją bibliotekę, a nie w bibliotece zespoły (.dll.config)

0

Jakoś popularna odpowiedź Paula Lemkego nie działa dla mnie. Projekt jest aplikacją webforms, która rozpoczęła się od .net v 2.0 i została uaktualniona do wersji .net 4.5

Zaktualizowałem pakiety i nuget utworzyłem poprawną zależnąAssembly/bindingRedirects.

Zgodnie z niektórymi komentarzami prawdopodobnie nie jest najlepszym pomysłem zmiana lokalnego pliku machine.config.

Apprently Miałem atrybut w moim pliku web.config, który powodował ignorowanie przez aplikację bindingRedirects.

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

Usunąłem ten atrybut xmlns i zaczęło działać.

2

Mieliśmy podobny problem. Ale w moim przypadku rozwiązanie modyfikacji pliku app.config przez Paula nie zadziałało. Powodem jest to, że używam go jako wtyczki w innej aplikacji. Dlatego bierze pod uwagę plik konfiguracyjny aplikacji. Dostaliśmy kod Google api z GitHub i zbudowaliśmy bibliotekę Google.Apis.Core po usunięciu zależności od System.Net.Http.Primitives. Następnie użyliśmy tej biblioteki DLL, która rozwiązała nasz problem.

0

Byłem w stanie rozwiązać to dość łatwo. Właśnie otworzyłem menedżera pakietów Nuget i zaktualizowałem pakiet bibliotek klienta Microsoft ASP.NET Web API 2.2. Ta aktualizacja Microsoft.Net.Http do najnowszej wersji, która rozwiązała problem ze Zgromadzeniem System.Net.Http.Primitives z możliwości znalezienia. Mam nadzieję że to pomoże!

3

Dla mnie to zadziałało, co następuje:

na Visual Studio (2012)> Narzędzia> Menedżer Nuget Opakowanie> Opakowanie Konsola Menedżer. Na górze pakietu Manager Console mam Źródło pakietu: nuget.org Domyślny projekt: projekt wymagający System.Net.Http.Primitives Oglądanie w pliku projektu (yourproject.csproj) z edytorem Czytałem wersję jest potrzebny (w moim przypadku był to Microsoft.Net.Http.2.2.28)

Poszedłem do https://www.nuget.org/packages/Microsoft.Net.Http/ i kliknąłem na moją wersję w "Historii wersji" (przewiń nieco stronę, jeśli jej nie widzisz). Po wybraniu wersji skopiować sugerowane polecenie - w moim przypadku było to:

install-Package Microsoft.Net.Http -version 2.2.28

ale jeśli wymagana jest najnowsza wersja jest właśnie to:

Zainstaluj pakiet Microsoft.Net.Http

i wklejasz go do konsoli programu Visual Studio Package Manager poprzednio otwartej zgodnie z wcześniejszym opisem. Wykonaj polecenie.

W projekcie pod odnośnikami, System.Net.Http.Primitives jest teraz aktualizowany.

1

Wpadłem na ten problem, gdy wydałem mój kod, który używa Google.Apis.Drive.v2 (v1.9.2.1860) do firmy, w której pracuję. Dałem im exe i wszystkie biblioteki DLL, które wygenerował Visual Studio (i NuGet), i dostali błąd. Nigdy nie dostałem błędu.

Poprawka była łatwa (kiedy ją wymyśliłem): Podczas instalacji api z Nuget plik 'assemblyname.exe.config' jest generowany automatycznie w folderze wyjściowym (aka, Debug lub Release). Wszystko, co musisz zrobić, to dołączyć ten plik, gdy uruchamiasz zespół w innym miejscu niż folder, który został wygenerowany. Oto kod dla tego pliku do mnie:

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

Jest to w zasadzie „drugi” fix Pawła, ale to automatycznie generowane przez menedżera pakietów. Problem dla mnie polegał na tym, że gdy próbowałem jego "pierwszej" poprawki, aktualizując Google.Apis.Auth i Google.Apis.Core (v1.9.3), sytuacja uległa pogorszeniu. Pojawiłby się ten sam błąd, z wyjątkiem tego, że "Google.Apis.Core" był nieprawidłową wersją (chociaż prawdopodobnie można by było rozwiązać również ten sam plik .exe.config).

Mam nadzieję, że Pomaga komuś, wiem, że ten wątek jest dość stary, ale to właśnie szybkie wyszukiwanie w Google mnie doprowadziło.

Edycja: Nie pamiętam, że jest to istotne dla kierowania aplikacji konsolowej .NET 4.5. Niektóre z nich prawdopodobnie nadal mają znaczenie dla innych celów .NET lub ASP.NET, ale nie wiem na pewno. Twój przebieg może się różnić.

0

W moim przypadku odwoływałem się do pakietów NuGet z biblioteki klas. NuGet nie informuje nas, że app.config biblioteki klas jest całkowicie ignorowany i musimy ręcznie skopiować jego zawartość do pliku app.config .exe.

+0

Gdzie znajduje się biblioteka 'app.config'? Czy skopiowałeś całą jej zawartość? – dakab

+0

Zwykle znajduje się w katalogu głównym folderu projektu i podczas kompilacji jest kopiowany do pliku 'bin \ Foo.dll.config'. Są one formatem XML, więc zwykle nie można po prostu skopiować go w dosłownym brzmieniu. Należy je porównać, a brakujące części skopiować pojedynczo. – DBN

0

Nuget się następujące zmiany 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>

do

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

Ten związek po instalacji, a następnie usuwania (w kontroli wersji revert) tego pakietu https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/

0

Miałem podobny problem z PowerShell s krypt dla TFS 2017. Skrypty nazywają kod .NET do wykonywania niestandardowych akcji podczas procesów kompilacji. Ciągle dostaję błędy dotyczące konfliktów wersji dll.

I był w stanie rozwiązać problemu, dopóki nie wdrożył hak do zdarzenia AppDomain AssemblyResolve jak na tej odpowiedzi: Making binding redirects work for office add-ins

Rozwiązanie to proces zmuszony do korzystania z bibliotek DLL bieżącej ścieżki. Wiem, że to trochę hackowanie, ale przeczytałem, że podczas uruchamiania PowerShell nie zawsze można użyć wiążących przekierowań, co jest tym, czego początkowo mogłem spróbować: https://github.com/google/google-api-dotnet-client/issues/555

Powiązane problemy