Ich habe eine .NET - Assembly , dass (aus Gründen außerhalb meiner Kontrolle) muss im GAC sein. Dieselbe Assembly wird jedoch von einem anderen Programm verwendet, das über eine eigene Kopie einer älteren Version derselben Assembly verfügt. Es muss eine eigene Kopie verwenden und nicht das, was sich im GAC befindet. Die richtige Versionierung ist in diesem Fall wahrscheinlich mühsamer als es sich lohnt, aus Gründen, auf die ich nicht eingehen werde. Meine Fragen sind: Gibt es sowieso etwas zu sagen .NET: Verwenden Sie einfach DIESE DLL, genau hier in diesem Verzeichnis - ignorieren Sie alles, was Sie im GAC oder anderswo finden .
70
*
diese nicht automatisch erhöht. Die MSDN-Dokumentation zu AssemblyVersionAttribute gibt an, dass es zufällig sein sollte, aber in der Praxis verwendet Visual Studio die Anzahl der Sekunden seit Mitternacht geteilt durch 2.Wenn sie die gleiche Versionsnummer haben, ist die Antwort, dass Sie nicht können. Wenn Sie versuchen, eine Assembly zu laden, die denselben vollständigen Assemblynamen (Name, Version, Schlüssel) wie eine GAC-Assembly hat, wählt die CLR jedes Mal die GAC-Assembly aus.
quelle
Sie können DEVPATH so einstellen, dass das Laden einer Baugruppe erzwungen wird (siehe Linktext)
Dies beantwortet Ihre Frage nicht, da es nur für Entwicklungszwecke gedacht ist und selbst dann nicht wirklich empfohlen wird, da es nicht die Produktionsnutzung widerspiegelt. Ich dachte jedoch, ich werde es trotzdem teilen, da es gut zu wissen ist.
quelle
Haben Sie Assembly.LoadFromFile () ausprobiert? Dies ist eine manuelle Aufgabe, sollte jedoch Ihre Baugruppe in den Speicher laden, bevor sie benötigt wird. .NET verwendet dann die im Speicher, anstatt danach zu suchen.
Ein anderer Weg wäre, wenn die lokale Versammlung nicht signiert wäre, könnten Sie es auf diese Weise unterscheiden.
rauben
quelle
Ich hatte ein ähnliches Problem. Ich habe das publicKeyToken der Ziel-DLL geändert, indem ich eine neue DLL verwendet
ildasm
undilasm
generiert habe. Ich habe es dann in der Projektreferenz aktualisiert, um auf die neue DLL zu verweisen. Die Schritte, die ich unternommen habe, sind hier .Das hat bei mir funktioniert.
quelle
Ein Grund dafür, dass die Bindungsumleitung nicht funktioniert, ist, dass der Oracle.ManagedDataAccess-Anbieter eine andere Suchreihenfolge für DLLs hat als der nicht verwaltete Anbieter. Der nicht verwaltete Anbieter startet im Anwendungsverzeichnis und sucht dann im DLL-Pfad in der Registrierung, dann im DLL-Pfad in machine.config und dann im DLL-Pfad in web.config. Gemäß der Oracle-Dokumentation funktioniert die Suchreihenfolge für den verwalteten Anbieter folgendermaßen:
https://docs.oracle.com/de/database/oracle/oracle-database/12.2/odpnt/installODPmd.html#GUID-0E834EC7-21DF-4913-B712-2B0A07FD58FD
Um dieses Problem zu beheben, müssen Sie die Registrierung der GAC-Assembly aufheben oder einfach eine andere Version von Oracle.ManagedDataAccess in Ihre bin und web.config einfügen als die in GAC, wenn Sie sie nicht deinstallieren können.
quelle