DLL ermitteln

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

CopWorker

Mitglied
Hallo zusammen,

kann ich in einem C# Projekt während der Laufzeit ermitteln,
welche DLLs verwendet werden bzw. ob eine bestimmte DLL als Verweis eingebunden ist.
Zwar steht das in der Projektdatei drin, ich habe aber keinen XML Parser.
Einfacher wäre besser.

Vielen Dank
CopWorker
 

CopWorker

Mitglied
Hallo zusammen,

vielen Dank für die Hilfe.
Sorry, das habe ich nicht erwähnt.
Es geht ausschließlich um DLLs die ich selber erstellt habe
und in mein Projekt eingebunden habe.
Mein Programm startet dann in Abhängigkeit der eingebunden DLLs
die dazugehörigen Eingabefenster um gezielte Einstellungen vorzunehmen.

So geht´s wie ich mir das vorstelle:

C#:
AppDomain currentDomain = AppDomain.CurrentDomain;
Assembly[] assems = currentDomain.GetAssemblies();

foreach (Assembly assem in assems)
{
    if (assem.GetName().Name == "RpcInterface")
        clOrderMan.CreateRpcControlCenterDlg();
}

Vielen Dank dafür.

Grüße von CopWorker
 

ComFreek

Mod | @comfreek
Moderator
Beachte, dass wenn du die DLL-Datei umbenennst (und auch in deiner Projektkonfiguration entsprechend änderst), zur Laufzeit dein Code nicht mehr funktionieren wird -- weil es hardcodiert von "RpcInterface" abhängt.

Das ist eigentlich ziemlich unerwartetes Verhalten. Stell dir vor, ein Entwickler in der Zukunft benennt die DLL-Datei um und plötzlich geht die Anwendung nicht mehr.
 

CopWorker

Mitglied
Hallo ComFreek,
vielen Dank für den Tipp.
Daran habe ich auch gedacht.
Den String "RpcInterface" werde ich noch über die "app.config"
des ins Projekts einlesen. Dann kann ich das auch ohne Quellcodeänderung anpassen.

Ok, noch was.
Ist es möglich, dass ich eine Windows Forms Projekt erstelle,
indem ich das Dialogfenster erst erzeuge wenn ich es brauche.

Ich möchte eigentlich nur die Instanz "clOrderMan" dauernd laufen lassen.
Der Instanz muss ich dann einen Thread zuordnen sonst läuft die einmal durch. Aber wie?
Das nächste ist, der Thread ohne Dialogfenster muss ich auch mal wieder beenden.???

C#:
static class Program
    {

        #region Instanzen...
        private static OrderManager clOrderMan;
        #endregion



        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            clOrderMan = new OrderManager();
            //clOrderMan.CreateRpcControlCenterDlg();
        }
    }

Grüße von CopWorker
 

Spyke

Premium-User
zur Anmerkung von ComFreek,
erstell dir am besten eine Schnittstelle IRpcInterface und prüfen dann in deinen DLLs die du durchsuchst ob es dort eine klasse gibt welche diese Schnittstelle implementiert hat.

zu der anfrage frage kann ich mich gerad nicht reindenken, wäre ev. auch ein Thema für einen neue Thread
 

ComFreek

Mod | @comfreek
Moderator
Du könntest die DLLs sich auch bei deiner Anwendung registrieren lassen, nämlich in ihrer Dll-Main-Funktion (oder wie die normalerweise heißt in der WinAPI).
Pluginsysteme jeder Art tun sowas klassischerweise. Um mal zwei Beispiele zu nennen: Chromium-Browsererweiterungen etwa sagen in ihrer Manifestdatei, was für eine Art von Erweiterung sie sind. Notepad++-Plugins erstellen Menüeinträge beim Eingebundenwerden.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…