DLL wird nicht gefunden

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Sederic Enders.

    DLL wird nicht gefunden

    Hi,

    Ich hab ein Programm, zu dem man PlugIns (DLLs) machen kann; diese werden also während der Laufzeit eingebunden. Ein PlugIn (DLL1) verwendet Teile aus einer anderen DLL (DLL2), die als Verweiß schon fest eingebunden sind. Im Entwicklermodus treten keine Fehler auf, alle Verweiße werden gefunden, also will ich debuggen:
    Jetzt passiert es aber, dass das Programm das PlugIn ordentlich erkennt und erstmal alles passt. Aber wenn dann der Teil vom PlugIn ausgeführt wird, in dem die Teile aus der DLL2 verwendet werden, kommt die Fehlermeldung:
    Die Datei oder Assembly "DLL2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
    Kann mir jemand helfen?
    @Sederic Enders:: Nimm zunächst Schwarz, nicht Weiß, sonst machen die Dir nämlich weiß, dass Verweis mit ß geschrieben wird. :D
    Zieh Dir mal den Dependency Walker runter, der muss nicht installiert werden, der arbeitet da, wo er liegt.
    Starte ihn und zieh per D&D Deine DLL auf die GUI. Der sieht dann nach, was alles gebraucht wird und dagt Dir genau, was fehlt.
    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!
    Huch Schrott. Ich hab mir noch, während ich getippt habe, gedacht, da stimmt doch was ned :D

    des Programm ist ja mal sau cool, aber was sagt mir das Ergebnis jetzt (-> Anhang)?
    Bilder
    • Dependency Walker Ergebnis.png

      47,18 kB, 866×579, 691 mal angesehen
    OffTopic:

    Sederic Enders schrieb:

    des Programm ist ja mal sau cool, aber was sagt mir das Ergebnis jetzt (-> Anhang)?
    Mich beunruhigt das, wenn Leute etwas toll finden, aber garnix damit anfangen können.

    Was soll daran sau cool sein, dass da haufenweise Tabellen und Listen angezeigt sind, mit Icons und teils in roter schrift?
    Lasst euch doch nicht von sonem Kuddelmuddel beeindrucken!

    Imo sollteste das Proggi erst dann gut finden, wenn du ein Problem damit gelöst hast, möglichst eines, was im Visualstudio unlösbar ist.
    Istn schönes Programm, benutzt ich seit Ewigkeiten. Es zeigt dir hauptsächlich an welche Funktionen deine PE exportiert oder importiert mit den entrsprechenden Modulen. So kann man schön rekursiv alle Abhängigkeiten durchsuchen und gucken welche fehlt. Diese werden auch direkt rot gekennzeichnet ^^

    Sederic Enders schrieb:

    aber was sagt mir das Ergebnis jetzt
    Es werden 6 fehlende Dateien angezeigt.
    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 ok, aber die namen der fehlenden abhängigkeiten hab ich noch nie irgendwo gelesen und wenn ich ein funktionierendes Plugin reinzeihe, werden die selben fehlenden referenzen angezeigt.

    Und ich hab rausgefunden, dass wenn ich jetzt dieses Plugin in einem testprogramm als festen Verweis ( ;) ) einbinde, dann läufts...
    Ein PlugIn wird aber nicht über einen Verweis bereitgestellt, sondern über Reflection.
    Der Sinn von PlugIns besteht ja darin, dass Du beliebige kompatible DLLs einbinden kannst, wenn Du ihr Interface hast.
    Mehrere kompatible PlugIn-DLLs würden sich als Verweise möglicherweise nicht vertragen, da sie im selben Namespace liegen können.
    Gugst Du hier.
    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 das weiß ich schon. Ich hab das auch nur in einem Testprogramm getestet, ob ich vllt so auf den Fehler komm... Aber ich weiß jetzt trdm nicht, wo der Fehler liegt. Muss ich vllt beim Einbinden (über Reflection) noch irgendwie eine Verknüpfung zur DLL2 herstellen?

    Sederic Enders schrieb:

    Verknüpfung
    Nein.
    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!
    Ups sry hab mich nicht richtig ausgedrückt. Ich meinte, ob ich nen Verweis vom PlugIn (DLL1) auf die DLL2 herstellen muss, also das ich sagen muss, wenn das PlugIn (DLL1) in das Hauptprogramm eingebunden wird, dass die DLL2 auch verwendet wird. Aber eigentlich ja nicht, weil ich die DLL2 ja schon fest in das Projekt vom PlugIn (DLL1) mit Visual Studio eingebunden hab... Das war nur eine Idee.

    Und das einbinden des PlugIns (DLL1) in das Hauptprogramm (mit Reflection und so wie es @RodFromGermany gezeigt hat (Das hab ich damals auch genau so übernommen)) funktioniert ja auch richtig. Nur wenn ich jetzt beim PlugIn (DLL1) zu einer Stelle komm, wo Teile aus der DLL2 verwendet werden, stellt sich das Programm auf den Kopf und sagt, dass es die DLL2 od. ne Abhängigkeit davon nicht finden kann, obwohl doch die DLL2 schon fest in die DLL1 reinkompiliert wurde, oder versteh ich da was falsch?!?

    Ich befürchte zwar, dass mich grad keiner versteht, weil ich so scheiße erklären kann, aber vllt. checkts ja doch wer :D
    @Sederic Enders:: Sieh es mal so:
    Das PlugIn wird durch ein Interface deklariert, genutzt wird es von einer EXE und implementiert von n Klassen.
    Das Interface kann in der EXE eingebunden sein (als Klasse).
    Oder
    Das Interface kann neben der EXE als DLL liegen, in diesem Fall benötigt die EXE den Verweis auf diese Interface-DLL.
    Beim Erstellen der n implementierenden Klassen benötigen diese n Klassen ebenfalls den Verweis auf diese Interface-DLL, Resultat seien n PlugIn-DLLs.
    Die EXE, die das PlugIn nutzt / bereitstellt, benötigt keinen Verweis auf die n PlugIn-DLLs, sonst könnte kein externer Programmierer ein weiteres PlugIn für dieses Interface schreiben.
    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!

    Sederic Enders schrieb:

    warum funktionierts dann ned?
    Was funktioniert wie nicht?
    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!
    naja hab ich doch schon 2 mal erklärt... und wenn ich keine Frage hätte, hätt ich den thread nicht eröffnet, oder? :D

    Sederic Enders schrieb:

    Hi,

    Ich hab ein Programm, zu dem man PlugIns (DLLs) machen kann; diese werden also während der Laufzeit eingebunden. Ein PlugIn (DLL1) verwendet Teile aus einer anderen DLL (DLL2), die als Verweiß schon fest eingebunden sind. Im Entwicklermodus treten keine Fehler auf, alle Verweiße werden gefunden, also will ich debuggen:
    Jetzt passiert es aber, dass das Programm das PlugIn ordentlich erkennt und erstmal alles passt. Aber wenn dann der Teil vom PlugIn ausgeführt wird, in dem die Teile aus der DLL2 verwendet werden, kommt die Fehlermeldung:
    Die Datei oder Assembly "DLL2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
    Kann mir jemand helfen?

    Sederic Enders schrieb:

    Nur wenn ich jetzt beim PlugIn (DLL1) zu einer Stelle komm, wo Teile aus der DLL2 verwendet werden, stellt sich das Programm auf den Kopf und sagt, dass es die DLL2 od. ne Abhängigkeit davon nicht finden kann, obwohl doch die DLL2 schon fest in die DLL1 reinkompiliert wurde, oder versteh ich da was falsch?!?

    Ich befürchte zwar, dass mich grad keiner versteht, weil ich so scheiße erklären kann, aber vllt. checkts ja doch wer :D

    Sederic Enders schrieb:

    naja hab ich doch schon 2 mal erklärt
    Hast Du nicht.
    Ich denke mal, Du hast das Funktionieren eines PlugIn-Systems (noch) nicht verinnerlicht. :S
    Poste Deinen Code, die erforderlichen DLLs (mach ein ZIP draus) und beschreib, wie Du glaubst, dass es funktionieren soll.
    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!
    Hm ja ich sag ja, ich kann nicht erklären. Ich wäre echt froh, wenn du od. jemand anderes sich das mal anschauen könnte...

    Kann man mit WinRAR öffnen; da ich ja nicht mehr als 1 MB hochladen darf hab ich das Archiv gesplittet...
    Ne Erklärung hab ich auch reingepackt (Info.txt)

    Code wäre - glaub ich zu lang... und vom Code her gibts ja keine Fehler beim kompilieren, sondern erst beim Debuggen
    Dateien