Laden von Assemblys zur Laufzeit und Erstellen von Instanzen mit Activator.CreateInstance ()

8

Ich versuche, eine Assembly zur Laufzeit zu laden, und ich bin mir nicht sicher, warum ich keine Instanz eines Typs in der Assembly mit der statischen Activator.CreateInstance() erstellen kann. Es funktioniert mit Assembly.CreateInstance() .

%Vor%

Das funktioniert:

%Vor%

Aber das funktioniert nicht:

%Vor%

FileNotFoundException ausgelöst:

  

Die Datei oder Assembly 'MyAssembly' oder eine der Dateien konnte nicht geladen werden   Abhängigkeiten. Das System kann die angegebene Datei nicht finden.

BEARBEITEN:

In beiden Fällen kann ich nach dem Aufruf Assembly.LoadFrom() sehen, dass meine Assembly geladen wurde, wenn ich in AppDomain.CurrentDomain.GetAssemblies() nachschaue.

    
davenewza 07.09.2012, 11:50
quelle

4 Antworten

2

Sie müssen zuerst die Assembly in Ihre aktuelle AppDomain laden:

%Vor%

EDIT: Funktioniert das?

%Vor%     
armen.shimoon 07.09.2012, 11:56
quelle
3

Sie können Ihre Datei mit seinem Pfad anpassen

%Vor%     
Aghilas Yakoub 07.09.2012 11:55
quelle
1

Versucht, die ursprüngliche Antwort zu bearbeiten, aber ich habe keine Antwort vom Autor erhalten. Also nur für den Fall, dass jemand das benötigt, hier ist der Code, der für mich funktioniert hat

%Vor%     
A Khudairy 16.11.2014 10:29
quelle
0

Eine Variation von A Khaudairys Antwort hier, die es erlaubt, Eingabeparameter zu übergeben, um auf einen bestimmten Konstruktor zuzugreifen, und diese Variation seiner Antwort löste ein Problem, das ich seit Wochen wörtlich gesucht habe und nun versuche, es aufzulösen (Viele Grüße an ihn für das Teilen der Antwort).

Mein Problem war, dass ich eine .NET 3.5-DLL in eine neue Anwendung laden wollte, die .NET 4.6 war, aber diese alten DLLs verwendeten Steuerelemente von Drittanbietern, die CAS-Richtlinien verwenden wollten. Ich würde einen Fehler von den Third-Party-Kontrollen bekommen sagen, dass ich in app.config drehen musste, wenn ich das tun würde, könnte ich die Dateien problemlos laden und ausführen, wenn sie auf meinem lokalen Computer waren, aber wenn ich versuchte, sie zu laden ein Netzlaufwerk, was ich tun muss, dann habe ich einen FileIOPermission-Fehler bekommen.

Ich habe versucht, Kombinationen von NetFx40_LegacySecurityPolicy mit loadFromRemoteSources und useLegacyV2RuntimeActivationPolicy auszuprobieren, und verschiedene Methoden wie Activator.CreateInstance () ausprobiert, was normalerweise für mich funktioniert, habe versucht, eine Sandbox zu erstellen (obwohl ich nicht weiß, ob ich es richtig gemacht habe) nichts würde funktionieren, außer für unten. Beachten Sie, dass meine Benutzersteuerelemente auch auf einer Basisklasse basierten. Ich habe vor dem Zugriff auf das Netzlaufwerk einige Befehle für die Eingabeaufforderung von CAS ausgeführt, und meine App sollte vollständig vertrauenswürdig ausgeführt werden. Wie auch immer, es sah nicht so aus, als ob irgendeine der Methoden, die ich bisher versucht hatte, für mich bisher funktioniert hat.

Der Code beheben:

%Vor%

... aus dem ich später das Objekt nach Bedarf (zu meiner Basisklasse) werfen könnte, um es später in seinem eigenen Formular / Fenster zu starten.

    
DeltaPng 06.03.2018 23:37
quelle

Tags und Links