.NETTO-Laden von Assemblys zur Laufzeit Wieder
Ich habe eine ähnliche Frage in eine Zeit vor. Ich brauche zum laden einer assembly zur Laufzeit.
Dies ist einfach, wenn ich weiß, der absolute Pfad der dll-Datei zur Laufzeit.
Aber ich nicht 🙁 Die Versammlung.Load () - oder LoadFromFile() schlägt fehl, wenn die Datei nicht in den root der Anwendung.
Das einzige, was ich habe, ist der dll-name. Die dll könnte sich in der Wurzel, system32 oder in sogar in den GAC.
Ist es möglich .net, um automatisch zu bestimmen, in dem die dll liegt, wie zum Beispiel :
es sollte der erste Blick in die root. Wenn Ihr es nicht verschieben auf den system-Ordner, sonst versuchen die GAC.
BEARBEITET
Ich bin mit plug-in-Architektur. Ich brauche nicht zu registrieren das dll. Ich habe ein multi-user-Anwendung. Ich habe eine applications-Tabelle enthält Informationen über Anwendungen. Jede Anwendung hat eine dll-Pfad zugeordnet, die bestimmte algorithmen, die mit dieser app verknüpften. Hoffe, das hilft.
InformationsquelleAutor MegaByte | 2009-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das aktuelle Programm sieht für Baugruppen, sieht es in mehrere Standorte (bin-Ordner, gac, etc..), wenn Sie nicht finden können, dann muss der Entwickler manuell zu sagen, die Anwendung, wo Sie zu suchen. Sie können dies tun, indem er das AssemblyResolve-Ereignis, und über die event-Argumente zu sagen, die CLR, wo Ihre Versammlung ist.
InformationsquelleAutor Chris Kooken
Können Sie hook up in
AppDomain.CurrentDomain.AssemblyResolve
Veranstaltung und laden Sie die assembly für Ihre Anwendung manuell auf Nachfrage.genau... aber neben Ihrem app Verzeichnis und GAC, es wird auch die Suche automatisch für die Montage in diesen Ordner.
FWIW Die oben genannte Methode ist veraltet, obwohl in der Gunst der AppDomainSetup.PrivateBinPath. Siehe msdn.microsoft.com/en-us/library/...
Die privaten Pfad oder einen relativen Suchpfad ist der Pfad relativ zum Basis-Verzeichnis, in dem der assembly resolver-Sonden für private Baugruppen. Deine Lösung oben funktioniert nicht.
danke. Sie haben Recht, es war vor langer Zeit ich war, dies zu tun. der erste Teil der Antwort entfernt.
InformationsquelleAutor lubos hasko
Ja, es ist ein Weg, und es hängt davon ab, ob die dll ist schwach(ohne public-key-token) oder stark(mit einem öffentlichen Schlüssel (token) genannt. Wenn Ihr schwach genannt und Sie haben eine Referenz auf die assembly mit der dll im VS, dann wird VS den ersten Blick in der Anwendung root-Ordner und wenn er es nicht findet, es wird dann schauen Sie in die Unterverzeichnisse, die Sie angeben, wie der Wert der privatePath-Attribut in der XML-config-Datei.
Wenn Ihr einen starken Namen der dll, dann wird die CLR-Suche im GAC ist so zu installieren, müssen Sie die dll in den GAC. Die CLR kann auch einen Blick in das Verzeichnis der Anwendung, wenn Sie die Installation eine XML-config-Datei, bei der codeBase-element verweist auf den dll-Pfad.
Angeben, eine assembly im GAC können Sie die /reference:[DLL-name] - Schalter beim kompilieren der assembly.
er kann nicht /Referenz, da er das laden von DLLs zur Laufzeit.. auch der /ref-Schalter ist für jede ref-Baugruppe (unabhängig von der GAC oder privat)
InformationsquelleAutor Lonzo
Die dll wird automatisch gefunden wird, ist es in gewisser Lage auf die in der PATH-variable (d.h., system32) oder wenn die dll registriert ist. Sie können es nicht finden, wenn Sie es kann überall auf der Festplatte, aber niemand braucht die Funktionalität sowieso.
EDIT: kann die dll ' s registriert werden? wie bekommen Sie den Namen der assembly, wenn Sie nicht wissen, der Versammlung vor der Zeit? Erstellen Sie irgendeine Art von plug-in-Architektur? Ich denke, es würde helfen, wenn Sie erklärt Ihre situation ein bisschen mehr.
EDIT2: Wenn das der Fall ist, warum nicht bieten eine Möglichkeit für die Benutzer zu registrieren sein oder Ihr plug-in? Sie können alle Informationen, die Sie benötigen, aus einer Datei-öffnen-dialog. Oder einfach machen Sie dump es in einem Ordner, den Sie angeben.
Ich denke, dies funktioniert für nicht verwalteten DLLs nicht geschafft, die lieben. Sehen Lonzo ' s post für das, was ich denke, was ist eine bessere Antwort.
InformationsquelleAutor Ed S.
Ich hoffe, du hast gelesen, bis auf die folgenden. Mein Vorschlag...
InformationsquelleAutor Gishu
Haben Sie drei Optionen
Finden Sie die details hier.
InformationsquelleAutor Leyu
Die Auflösung Algorithmus verwendet .NET finden Sie die Baugruppen und Ihre Angehörigen ist straight forward.
Klicken Sie hier für das video erklärt die .net resolution-Algorithmus, und klicken Sie hier ein video zur späten Bindung Baugruppen
InformationsquelleAutor Jane
Registrieren der assembly in den GAC. Wie das geht
InformationsquelleAutor abatishchev
Verwenden Sie diese
Montage.LoadWithPartialName(assemblyName);
InformationsquelleAutor