DLLs in seperatem Verzeichnis mitliefern

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mangafreak1995.

      DLLs in seperatem Verzeichnis mitliefern

      Hallo,

      Wenn ich ein umfangreiches Programm mit vielen externen Bibliotheken veröffentlichen will, nervt es mich
      dass alle DLLs im selben Verzeichnis der EXE liegen müssen. Ich finde übersichtlicher, alle DLLs in einem Unterordner
      zu speichern, der beispielsweise "Libraries" heißt.

      Sollten die Namespaces eurer Libraries keine Sonderzeichen/Leerzeichen enthalten, kann man dafür einen Allgemeingültigen Code
      verwenden.

      Folgender Code muss in den Anwendungsereignissen eures Programms geschrieben werden (Projekteigenschaften > Anwendung > Anwendungsereignisse anzeigen):

      VB.NET-Quellcode

      1. Namespace My
      2. ' The following events are available for MyApplication:
      3. '
      4. ' Startup: Raised when the application starts, before the startup form is created.
      5. ' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
      6. ' UnhandledException: Raised if the application encounters an unhandled exception.
      7. ' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
      8. ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
      9. Partial Friend Class MyApplication
      10. Private WithEvents MyDomain As AppDomain = AppDomain.CurrentDomain
      11. Private Function MyDomain_AssemblyResolve(ByVal sender As Object, ByVal args As System.ResolveEventArgs) As System.Reflection.Assembly Handles MyDomain.AssemblyResolve
      12. Dim dll_file As String = System.AppDomain.CurrentDomain.BaseDirectory + "Libraries\" + args.Name.Split(CChar(","))(0) + ".dll"
      13. If System.IO.File.Exists(dll_file) Then
      14. Return System.Reflection.Assembly.LoadFile(dll_file)
      15. Else
      16. Return Nothing
      17. End If
      18. End Function
      19. End Class
      20. End Namespace



      Ihr solltet natürlich nicht vergessen das Verzeichnis zu erstellen und die DLLs dort reinzuschieben :D

      mfg vredesbyrD

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „vredesbyrD“ ()

      das sieht für mich so aus als ob dann nur eine DLL geladen wird
      sollte "/Libraries/" nicht "\Libraries\" sein ?

      klär mich ma auf ^^

      MfG M4n94fr34k
      1: Es werden alle Assemblies geladen, da der Code im ResolveAssembly-Event steht. Er wird jedes mal aufgerufen wenn nach einer DLL verlangt wird.
      2: Stimmt, es sollte "Libraries\" stehen :D Aber nur ein Backslash, da "System.AppDomain.CurrentDomain.BaseDirectory" immer auf "\" endet

      mfg vredesbyrD
      jop es klappt ^^
      sorry für Doppelpost, konnte meinen aber nicht editieren weil er noch nicht freigeschaltet wurde