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()
.
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.
Sie müssen zuerst die Assembly in Ihre aktuelle AppDomain laden:
%Vor%EDIT: Funktioniert das?
%Vor%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%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.
Tags und Links .net c# reflection