KontekstDlaczego moja aplikacja zawsze korzysta z najnowszej wersji GAC zamiast wersji referencyjnej?
Mam 2 różne wersje zestawu zainstalowanego w GAC, wersji 1.0 i wersji 2.0. Zrobiłem aplikację, która odwołuje się do wersji 1.0 jako konkretnej wersji.
Issue
Kiedy uruchomić mój wniosek, to zawsze będzie ładować w wersji 2.0, podczas gdy aplikacja jest specjalnie przedstawieniu wersji 1.0.
Pytanie
Dlaczego tak się dzieje? Jak mogę wymusić na mojej aplikacji załadowanie wersji, dla której została skompilowana?
Nie wydaje mi się, że ma to coś wspólnego z wiążącym przekierowaniem, ponieważ moja aplikacja nie była nawet świadoma wersji 2.0, kiedy ją zbudowałem i że referencyjne metadane "Konkretnej wersji" są ustawione na true.
Dzięki.
Edit:
Zespół ja przedstawieniu jest rzeczywiście Oracle.DataAccess z pakietu ODAC. Zauważyłem, że inne zespoły o nazwie Policy.x.xxx.Oracle.DataAccess zostały opublikowane w GAC.
Edit 2:
Po patrząc na politykę Oracle.DataAccess znalazłem konfigurację określającą wiązania przekierowanie:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="4.112.0.0-4.112.3.0" newVersion="4.112.3.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Chociaż dodał odwrócić wiążące przekierować do mojego konfiguracja aplikacji, polityka w GAC wydaje się mieć priorytet. znalazłem MSDN article potraktowanie tematu i sugeruje, aby ignorować politykę w tej konfiguracji:
<publisherPolicy apply="no" />
Ale to nadal nie działa ...
Edycja 3:
I próbował usunąć politykę z GAC i ponownie uruchomić mój komputer. W końcu zadziałało. Nie ma wrażenia, że jest to wygodne rozwiązanie, ale ta polityka złamała jedną z moich aplikacji, co oznacza, że wyłączenie polityki jest właściwe w moim przypadku.
Finał Edit:
Igor dał mi właściwą odpowiedź.Wszystko co musiałem zrobić, aby obejść te zasady było użyć ustawienia publisherPolicy
w prawej części configruation:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<publisherPolicy apply="no"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Czy sprawdzić, że nie było żadnego polityka wydawcy za odwołanie montażu ? –
@IgorKorkhov: Tak, znalazłem coś w nazwie Policy.x.xxx.MyAssemblyName w GAC. Nie wiedziałem o takim mechanizmie. Edytuję moje pytanie i możesz przesłać odpowiedź. Dzięki. – Ucodia
Pytanie styczne: Jaki problem powoduje, że chcesz używać V1? Używam Oracle od czasu do czasu, więc uprzedzony jest przedramion :) – Ian