Warum verwendet meine Anwendung immer die neueste GAC-Version anstelle der referenzierten Version?

8

Kontext

Ich habe zwei verschiedene Versionen einer Assembly in GAC, Version 1.0 und Version 2.0 installiert. Ich habe eine Anwendung erstellt, die 1.0 als eine bestimmte Version referenziert.

Problem

Wenn ich meine Anwendung ausführe, wird immer Version 2.0 geladen, während die Anwendung spezifisch auf Version 1.0 verweist.

Frage

Warum passiert das? Wie kann ich meine Anwendung zwingen, die Version zu laden, für die sie kompiliert wurde?

Es scheint mir nicht, dass dies etwas mit einer verbindlichen Umleitung zu tun hat, da meine Anwendung nicht einmal die Version 2.0 kannte, als ich sie erstellte und dass die Referenz "Spezifische Version" -Metadaten auf true gesetzt ist.

Danke.

Bearbeiten:

Die Assembly, auf die ich verweise, ist OracleDataAccess aus dem ODAC-Paket. Ich habe festgestellt, dass andere Assemblies namens Policy.x.xxx.Oracle.DataAccess in GAC veröffentlicht wurden.

Bearbeiten 2:

Nachdem ich die Oracle.DataAccess-Richtlinie betrachtet habe, habe ich die Konfiguration gefunden, die die verbindliche Umleitung definiert:

%Vor%

Obwohl ich die umgekehrte Bindungsumleitung in meine Anwendungskonfiguration aufgenommen habe, scheint die Richtlinie in GAC die Priorität zu haben. Ich habe einen MSDN-Artikel gefunden, in dem das Thema behandelt und vorgeschlagen wurde, die Richtlinie mit dieser Konfiguration zu ignorieren:

> %Vor%

Aber es funktioniert immer noch nicht ...

Bearbeiten 3:

Ich habe versucht, die Richtlinie aus dem GAC zu entfernen und meinen Computer neu gestartet. Es hat endlich funktioniert. Es fühlt sich nicht wie eine komfortable Lösungsentwicklung an, aber diese Richtlinie hat eine meiner Anwendungen zerstört, was bedeutet, dass die Deaktivierung der Richtlinie in meinem Fall das Richtige ist.

Letzte Änderung:

Igor gab mir die richtige Antwort. Alles, was ich tun musste, um diese Richtlinien zu umgehen, war die Verwendung der Einstellung publisherPolicy im richtigen Konfigurationsabschnitt:

%Vor%     
Ucodia 22.05.2012, 10:58
quelle

1 Antwort

7

Nachdem Sie Ihre Frage bearbeitet haben, wird klar, dass dies die Richtliniendatei ist, die sich auf die Baugruppenbindung auswirkt.

Im Falle von Oracle gibt es eine Datei namens Policy.X.Y.Oracle.DataAccess.config mit dem Inhalt ähnlich:

%Vor%

Die Richtlinie wird vom Oracle Installer installiert und leitet Oracle.DataAccess.dll auf die neueste Version um, da Oracle der Meinung ist, dass die Bibliothek abwärtskompatibel ist.

BEARBEITEN: Wenn Sie nicht möchten, dass die Publisher-Richtlinie für eine bestimmte Assembly angewendet wird , fügen Sie das Element in das Element ein:

%Vor%     
Igor Korkhov 22.05.2012, 12:00
quelle