Kann man Desktopanwendungen in Klassenbibliotheken (DLL) umwandeln und aufrufen?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Kann man Desktopanwendungen in Klassenbibliotheken (DLL) umwandeln und aufrufen?

    Hallo Forum,

    da ich leider diesbezüglich nie was machen musste bzw. was gemacht habe bin ich da sehr unerfahren drin.
    Um Wartungsarbeiten zu vereinfachen möchte ich einzelne Desktopanwendungen in eine Klassenbibliothek auslagern, allerdings habe ich keinen Plan wie man das am einfachsten machen kann.
    Ich habe unter anderem Programme die ~3000 Zeilen Code beinhalten und würde gerne alles mehr oder weniger auslagern um einzelne "Module" aufrufen zu können. So bleibt die Hauptanwendung weiterhin Kompakt.

    Ich würde gerne weiterhin den Vorteil des Designers nutzen aber am liebsten wäre mir es, wenn anstelle der .EXE eine .DLL rauskommen würde und ich diese aufrufen kann.
    Habt ihr hierzu einen guten Guide oder Tipps/Ratschläge?

    Vielen Dank,
    Drahuverar
    Option Strict On!

    Drahuverar schrieb:

    So bleibt die Hauptanwendung weiterhin Kompakt.

    Das ist doch nur Augenwischerei. Ob die Daten jetzt im Projekt oder in eine dazugehörigen DLL liegen ist doch egal. Sie müssen so oder so beim Start der Anwendung geladen werden. Damit hat sich das mit "schlank".
    Eine DLL macht meiner Erfahrung nur dann wirklich sinn wenn du den gleichen Code bei verschiedenen Projekten nutzen willst.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @Schamash Jou.

    Drahuverar schrieb:

    wenn anstelle der .EXE eine .DLL rauskommen würde und ich diese aufrufen kann.
    Du kannst in den Projekteinstellungen vorgeben, ob das eine Consoleanwendung, winw WinForms-Anwendung oder eine Library sein soll.
    Welchen Einfluss das auf die restlichen Einstellungen und den Code hat, hab ich noch nicht probiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja es kommt halt ganz drauf an.
    Eine Normale Form.vb Application mit Designer usw. in eine DLL auslagern geht nicht, da Bezüge auf Objekte im Designer. Reiner Code ohne Bezüge auf Objekte auslager geht natürlich. Als Klassenbibliothek halt.
    "Die menschliche Vorstellungskraft ist unendlich"
    ->Versuch dir mal 'ne neue Farbe auszudenken!

    Mit Schleifen kann man alles lösen!

    Dim d as Double = 1
    Do until d = 0
    d = (d / 2)
    Loop
    Hey @Schamash,
    ja, ich weiß was du meinst.

    Letzten Ende habe ich einen Launcher und würde gerne damit die einzelnen Anwendungen instanzieren und aufrufen.
    Würde ich alle Desktopanwendungen in eine packen wäre ich bei ~13 MB, das ist als Anwendung auf dem Netzlaufwerk ziemlich blöd. Bilder etc. habe ich schon komprimiert aber letzten Endes würde ich durch das auslagern wohl einiges an MB bei der Hauptanwendung sparen können.
    Option Strict On!

    M-Stef schrieb:

    Eine Normale Form.vb Application mit Designer usw. in eine DLL auslagern geht nicht
    Diese Aussage ist falsch.
    Wenn Du der DLL die nötigen Verweise mitgibst, kannst Du da selbstverständlich ne Form reinpacken.
    Allerdings kann die nicht einfach so als Hauptform der aufrufenden Exe verwendet werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Drahuverar schrieb:

    Würde ich alle Desktopanwendungen in eine packen wäre ich bei ~13 MB, das ist als Anwendung auf dem Netzlaufwerk ziemlich blöd.
    Warum?

    Du könntest ja das MEF (Managed Extensibility Framework) nutzen, und aus deinen Anwendungen "Plugins" machen. Jedoch sehe ich bei 13MB da wirklich noch keine Not.
    @~blaze~, @RodFromGermany, @EaranMaleasi
    Ich erläutere Mal ein bisschen mehr das Problem bzw. die Thematik.
    Ich habe eine große Benutzergruppe und veröffentliche des öfteren Updates, diese Updates sind zur Zeit sehr einfach gehalten. Um eine Anwendung upzudaten wird zur Zeit die komplette Anwendung ersetzt;
    Die User haben eine Verknüpfung der Anwendung auf ihrem Desktop und greifen so immer auf die Aktuelle Version zu. (Bemerkung am Rande, bevor sich jemand die Arbeit macht:"Das geht doch nicht, wenn die Anwendung am laufen ist..."- Doch, dass geht. Eine Anwendung wird bei Inaktivität nach einem gewissen Intervall geschlossen. ^^)
    Jedenfalls habe ich mittlerweile mehr als 10 verschiedene Anwendungen und kann leider, da diese alle sehr spezifisch sind, keine DLL erstellen um auf allgemeine Funktionen zurückzugreifen, weil spezfisch.

    RodFromGermany schrieb:

    Du kannst...WinForms-Anwendung oder eine Library sein soll.

    Ja, dass ist richtig, allerdings ist es nicht einfach eine Win Forms Application einfach als Class Library auszuspucken. Das Studio verwirft die von mir erstellte Anwendung bzw. das Design und somit wäre das Komplette Projekt mehr oder weniger für die Katze.

    @EaranMaleasi
    Mit MEF habe ich noch nichts gemacht, müsste ich mich mal mit auseinander setzen- vielleicht wäre es ja doch hilfreich..?
    13 MB sind schon groß, wenn man von außerhalb (VPN) auf die Anwendung zugreift.

    Ich will halt nicht hingehen und einzelne Anwendungen dem Launcher hinterlegen,also als Pfad. :(
    Letzen Endes müsste ich eine Klassenbibliothek erstellen und dort eine Form aufrufen, das würde ja dann gehen, aber damit wäre ich ehrlich gesagt auch nicht zufrieden.
    Option Strict On!
    Ich würde die Ressourcen (Bilder, usw.), falls möglich, auf dem ausführenden System behalten und nicht in die Executables integrieren und diese bei einem Update-Vorgang ersetzen, falls nötig.

    Bzgl. Modularisierung: Wenn du so programmiert hast, dass du lauter Komponenten hast, die insgesamt zusammenspielen, sollte es gehen, die Codes einfach in Programmbibliotheken auszulagern und diese über eine Host-Anwendung zu laden, d.h. per Reflection oder MEF.

    Viele Grüße
    ~blaze~