tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
632
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Klobow Klobow ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    42
    Hallo Zusammen,

    ich kämpfe jetzt schon länger an einem Problem mit DLLs und hoffe Ihr könnt mir helfen, da meine Such im Internet und auch in diesem Forum bis jetzt erfolglos verlief.

    Ich habe ein Projekt erstellt das aus mehreren 'Subprojekten' besteht. Die 'Subprojekte' werden zu jeweils zu DLLs kompiliert. Im Hauptprojekte habe ich diese als Verweise über den Reiter "Projekte" eingebunden.
    In den Verweisoptionen ist eingestellt das eine lokale Kopie erstellt werden soll, wenn ich diese nicht einstelle findet er die DLLs nicht.
    Nach dem Kompilieren liegen nun (meine) DLLs zusammen mit der exe im Stammverzeichnis, wenn ich die exe jetzt Starte läuft alles einwandfrei. Kopiere ich die DLLs dann aber in ein Unterverzeichnis im Stammverzeichnis startet das Programm nicht mehr. Ich gehe mal davon aus das er die DLLs nicht findet.

    Laut MS Homepage (sorry ich weiß nicht mehr auf welcher Seite ich hab soviel gelesen) sucht er DLLs erst im Stammverzeichnis, dann in Unterordnern und dann in der GAC. An dieser Stelle sei angemerkt, das ich das verwenden der GAC wenn möglich vermeiden will.

    So, viel geschrieben, jetzt hoffe ich, das mir jemand helfen kann.
    Noch was, sorry, kann ich beim Programmstart feststellen ob eine DLL fehlt und dann das Programm ordentlich mit einer Meldung: "Die Datei xy.dll wurde nicht gef. das Prog wurde beendet" beenden? Damit mein ich nicht ob ich mir das von Hand in den Startup der MainForm programmieren kann sondern ob das automatisch geht.

    Herzlichen Dank schonmal für jede Antwort
    Tobias
     
    Zwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Die .NET-Runtime hat eine bestimmte Reihenfolge, in der sie nach Referenzen sucht. (da ich jetzt nichts falsches sagen will, schreib ich diese mal nicht auf).
    Zu deinem Problem:
    Als erstes empfehle ich dir, dass du nicht die Projekte referenzierst sondern die fertigen DLLs. Deine einzelnen Projekte solltest du so einstellen, dass sie alle ins gleiche Verzeichnis kompilieren. Zusätzlich solltest du die Projekte für die DLLs so konfigurieren, dass sie direkt ins Unterverzeichnis bauen.
    Die Referenzen zur DLL sollten dann jedoch so sein, dass sie nicht kopiert werden.

    Ich kann das hier jetzt leider nicht ausprobieren und meine Projekte sind so, dass Exe und DLL in einem Verzeichnis liegen, aber so in etwa sollte die Angelegenheit funktionieren.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Klobow Klobow ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    42
    Hallo Nico,

    erstmal danke für deine Antwort, sorry das ich so lange auf eine warten ließ, aber ich war über's Wochenende nicht da.

    Zurück zum Problem, die Suchreihenfolge wie du meinst ist wohl das hier.
    Dazu noch eine Frage, dieser RegKey "App Path" ist doch der Selbe wie die Umgebungsvariablen die man in den Systemsteuerung eintragen kann oder?
    Wenn ja, dann habe ich das schon versucht und das hat nicht geklappt!

    Zu deinem Anderen Vorschlag die DLLs direkt zu verlinken, kann ich dann trotzdem nocht
    komplett übersetzten und Debuggen? D.h. wenn ich Änderungen an einer DLL vornehme wird das dann auch sofort mit übernommen? Und welche Binde ich dann ein, die Debug oder die Release DLL? Theoretisch müsste ich dann bei jeder kompilierung den Link ändern.

    ansonsten noch einen schönen Sonntag.
    Gruß Tobias
     
    Zwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]

  4. #4
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von Klobow Beitrag anzeigen
    Zu deinem Anderen Vorschlag die DLLs direkt zu verlinken, kann ich dann trotzdem nocht
    komplett übersetzten und Debuggen? D.h. wenn ich Änderungen an einer DLL vornehme wird das dann auch sofort mit übernommen? Und welche Binde ich dann ein, die Debug oder die Release DLL? Theoretisch müsste ich dann bei jeder kompilierung den Link ändern.
    Nein, musst du nicht. Beim Setzen der REferenzen musst du nur darauf achten, dass du beim gleichen Typ bleibst. Also wenn du für deine Exe Debug gewählt hast, solltest du auch die Debug-DLLs referenzieren. Debuggen kannst du weiter wie gewohnt. Der Debugger kennt die Projekte nicht, er kennt nur die DLL, die PDB und die Source-Files.
    Ggf. musst du die Build-Reihenfolge der einzelnen Projekte in der Solution anpassen (Rechtklick auf das Solution-File), wenn die DLLs auch untereinander referenziert sind.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  5. #5
    Klobow Klobow ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    42
    Nein, musst du nicht. Beim Setzen der Referenzen musst du nur darauf achten, dass du beim gleichen Typ bleibst. Also wenn du für deine Exe Debug gewählt hast, solltest du auch die Debug-DLLs referenzieren.
    Das meinte ich doch, jedes mal wenn ich zwischen Debug und Release umschalte (und das kommt leider öfter vor) muss ich die Referenzen ändern. Da es sich hierbei um seeehr viel handelt, ist dies leider nicht praktikabel!

    gruß
    Tobias
     
    Zwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]

  6. #6
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Nabend

    Ich weiß, was du meintest
    Die Antwort war vielleicht etwas missverständlich, aber es funktioniert so
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  7. #7
    Klobow Klobow ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    42
    Hallo Nico,

    da bin ich wieder, also ich habe deinen Rat befolgt und die Verweise direkt auf
    die Kompilierten dlls geändert, leider ist das Ergebnis das selbe, wenn
    die dll nicht im selben Ordner wie die exe liegt läuft das Programm nicht!

    Schönen Gruß
    Tobias
     
    Zwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]

  8. #8
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hm, ok, dann tuts mir leid. Das war die einzige Möglichkeit, die mir einfiel.
    Die Assemblies in den GAC zu legen finde ich übertrieben, da sie nur von einer Anwendung genutzt werden und du sie auch niemanden zur Verfügung stellen willst (nehm ich mal an).
    Aber wieso willst du die DLLs in ein Unterverzeichnis packen? Der Sinn ist mir nicht ganz klar


    //EDIT
    Also ich habs jetzt doch mal ausprobiert und es geht so, wie ich es beschrieben hab!
    Hast du bei den Referenzen Copy local auf False gesetzt? Wenn nein, mach das mal
    Geändert von Nico Graichen (05.10.07 um 08:13 Uhr)
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  9. #9
    Klobow Klobow ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    42
    Hallo Nico,

    ja wie gesagt, die GAC halte ich auch, aus den von dir angeführten Gründen, für keine gute Lösung.

    Aber wieso willst du die DLLs in ein Unterverzeichnis packen? Der Sinn ist mir nicht ganz klar
    Ja, auf diese Frage habe ich gewartet.
    Nun das liegt daran weil es eben nicht ein sondern in der Regel zwei manchmal auch drei und zukünftig evtl. sogar vier Programme sind die hier einen gemeinsammen Librarystamm benutzen und es unabdingbar ist das die DLLs in der selben Version vorliegen. Aus diesem Grund würde ich gerne folgende Hierachie aufbauen:

    MeinDir\Prog1\ (spezielle DLLs und Files für Prog1, auch XMLs etc. dabei)
    MeinDir\Prog2\ (spezielle DLLs und Files für Prog2, auch XMLs etc. dabei)
    MeinDir\Library\ (DLLs die von Prog1 und Prog2 gemeinsam benutzt werden)
    MeinDir\Prog1.exe
    MeinDir\Prog2.exe

    Könntest du mir deinen Versuch bitte per Mail zukommen lassen? Wahrscheinlich
    bin ich einfach nur zu dämlich oder hab dich falsch verstanden.
    Anm.: Lokale Kopie ist true!

    //Edit:
    Also die Solution nicht das Kompilat.

    schönen Gruß
    Tobias
     
    Zwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]

  10. #10
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von Klobow Beitrag anzeigen
    Könntest du mir deinen Versuch bitte per Mail zukommen lassen? Wahrscheinlich
    bin ich einfach nur zu dämlich oder hab dich falsch verstanden.
    nein, da du es aufgrund fehlender Referenzen sowieso nicht bauen könntest
    Zitat Zitat von Klobow Beitrag anzeigen
    Anm.: Lokale Kopie ist true!
    siehe oben
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  11. #11
    Klobow Klobow ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    42
    Jaja, wer lesen kann ist klar im Vorteil! Sorry
    Aber ... ich hab jetzt wirklich alles Versucht ob lokale Kopie true oder false,
    anderes Kompileziel ...
    Ist die DLL in einem anderen Ordner / Unterordner läuft es nicht. Hab mir
    dafür jetzt so ein kleines miniprojekt mit einer DLL gemacht um das zu testen...
     
    Zwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]

  12. #12
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Ich hab dir mal eine kleine Solution angehängt...
    Angehängte Dateien Angehängte Dateien
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  13. #13
    Klobow Klobow ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    42
    Hallo Nico,

    erstmal sorry das ich mich so lange wieder nicht gemeldet habe, aber ich war wiedermal unterwegs. Danke das du Dir die Mühe mit dem Bsp. gemacht hast. Ich hab mir das jetzt angeschaut und auch in meinem Bsp. zum laufen gebracht. Allerdings ist diese Lösung für mich leider so nicht praktikabel.

    Allerdings hab ich eine neue Lösung gefunden die ich umsetzten werde und zwar erstelle ich von meinen Klassen Interfaces. Dies Sammle ich in einem Interfaceprojekt, in welchem ich die DLLs auf dem Fußweg lade. der Einzige 'Verweis' den ich zu meinem Projekt dann noch hinzufüge ist der des Interface. Beim anlegen einer Instanz gehe ich dann über das Interfaceprojekt. Das ganze hat natürlich den Nachteil, das ich beim anlegen einer Instanz explizit auf die Zielklasse casten muss.

    Fall sich jemand für eine Bsp. hiefür interessiert, gerne mit Mail oder PN an mich!

    schönen Gruß
    Tobias
     
    Zwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 11.01.11, 21:40
  2. Antworten: 4
    Letzter Beitrag: 22.03.06, 20:50
  3. Antworten: 0
    Letzter Beitrag: 06.10.04, 14:03
  4. PROBLEM! Pinnacle 2 GB Begrenzung Windows 2000 DC 50 PROBLEM!
    Von hennym im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 6
    Letzter Beitrag: 17.09.03, 22:09
  5. Antworten: 6
    Letzter Beitrag: 13.06.02, 12:29