To nie jest problematyczne pytanie, ale ogólne pytanie dotyczące działania przekierowania powiązań asemblera.
Zapytania
- Dlaczego przekierowanie powiązania pokazuje tylko wersję główną, a nie numery drugorzędne, kompilacji i poprawki?
Czy stara i nowa wersja zmienia się tylko wtedy, gdy następuje zmiana w wersji głównej?
<dependentAssembly> <assemblyIdentity name="FooBar" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" /> <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly>
c#
assembly-binding-redirect
Nikhil Agrawal
źródło
źródło
oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"
Odpowiedzi:
Dlaczego w ogóle potrzebne są wiążące przekierowania? Załóżmy, że masz aplikację A, która odwołuje się do biblioteki B, a także do biblioteki C w wersji 1.1.2.5. Biblioteka B z kolei odwołuje się do biblioteki C, ale w wersji 1.1.1.0. Teraz mamy konflikt, ponieważ nie można załadować różnych wersji tego samego zestawu w czasie wykonywania. Aby rozwiązać ten konflikt, możesz użyć przekierowania wiązania, zwykle do nowej wersji (ale może też być do starej). Robisz to, dodając do pliku app.config aplikacji A, w
configuration > runtime > assemblyBinding
sekcji (zobacz tutaj przykład pełnego pliku konfiguracyjnego):Możesz również określić zakres wersji do zmapowania:
Teraz biblioteka B, która została skompilowana w odniesieniu do C w wersji 1.1.1.0, będzie używać C w wersji 1.1.2.5 w czasie wykonywania. Oczywiście lepiej upewnij się, że biblioteka C jest kompatybilna wstecz, w przeciwnym razie może to prowadzić do nieoczekiwanych wyników.
Możesz przekierować dowolne wersje bibliotek, nie tylko te główne.
źródło
Napotkaliśmy problem z przekierowaniem wiązania dla NewtonSoft.Json. Sprawdziliśmy wersję pliku we właściwościach pliku „9.0.1.19813” systemu win 10, sprawdziliśmy numer i przekierowanie wciąż kończyło się niepowodzeniem. Dalsze badanie i okazało się, że szukaliśmy wersji pliku, a nie wersji zestawu. Zastanawiam się więc, czy ludzie mylą wersję pliku (która często się zmienia) i wersję zestawu (której nie widać w Eksploratorze plików systemu Windows 10). Aby zobaczyć wersję biblioteki DLL w zestawie, możesz uruchomić to w programie PowerShell. Zastąp nazwę biblioteki dll tą, dla której chcesz znaleźć wersję.
Wynikiem powyższego jest.
Zobacz referencje:
Jak mogę zobaczyć wersję zestawu zestawu .NET w systemie Windows Vista i nowszych (Windows 7, 2008)?
https://support.microsoft.com/en-nz/help/556041
źródło