DLL aus Ressoucen laden ohne Anwendungsframework (ApplicationEvents.vb) zu nutzen

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    DLL aus Ressoucen laden ohne Anwendungsframework (ApplicationEvents.vb) zu nutzen

    Hallo,
    ich weiß, die Frage nach der Ressourceneindung wurde schon oft gestellt, aber ich möchte unter Eigenschaften->Anwendung nichr das "Anwendungsframework aktivieren", da ich eine eigene Sub Main() benutze.
    Leider steht mir damit der Punkt "Anwendungsereignisse anzeigen" und die "ApplicationEvents.vb" nicht zur Verfügung.

    Mein bisheriger Code, der auch funktioniert:

    VB.NET-Quellcode

    1. Imports System.Reflection
    2. Namespace My
    3. ' Für MyApplication sind folgende Ereignisse verfügbar:
    4. ' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
    5. ' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung mit einem Fehler beendet wird.
    6. ' UnhandledException: Wird bei einem Ausnahmefehler ausgelöst.
    7. ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn die Anwendung bereits aktiv ist.
    8. ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
    9. Partial Friend Class MyApplication
    10. Private WithEvents Domaene As AppDomain = AppDomain.CurrentDomain
    11. Private Function Domaene_AssemblyResolve(ByVal sender As Object, ByVal args As System.ResolveEventArgs) As System.Reflection.Assembly Handles Domaene.AssemblyResolve
    12. If args.Name.Contains("myDLL") Then
    13. Return System.Reflection.Assembly.Load(My.Resources.myDLL)
    14. Else
    15. Return Nothing
    16. End If
    17. End Function
    18. End Class
    19. End Namespace


    Wie kann ich diesen Code nun beim Starten des Projektes mittels der Sub Main() ausführen?

    Ich habe schon versucht ihn in eine eigene Klasse auszulagern, aber es kommt leider immer die Laufzeitfehlermeldung, daß die DLL nicht gefunden wird. Ich vermute, daher daß der Aufruf der "AssemblyResolve" gar nicht vom System genutzt wird.
    Wer kann mir hier bitte weiterhelfen?

    Danke! :)

    P.S.: (Ja, ich möchte die DLL in die EXE integrieren, nein, ich möchte kein ILMerge nutzen)
    @hawk78 Geh mal davon aus, dass alles, was mit My. beginnt, nicht mehr da ist (so, wie bei jedem normalen C#-Programm ;) ).
    Da musst Du natürlich auch mit den Ressourcen anfangen: Namespace.Properties.Ressources oder so ähnlich, da musst Du Dich mal durchhangeln.
    Du musst dann nur noch rauskriegen, wann auf diese DLL zugegriffen werden soll, am besten, Du machst das explizit mit der Instanziierung der ersten Klasse.
    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!