ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
632
632
EMPFEHLEN
-
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
TobiasZwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]
-
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 von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
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ß TobiasZwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]
-
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 von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
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!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.
gruß
TobiasZwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]
-
Nabend
Ich weiß, was du meintest
Die Antwort war vielleicht etwas missverständlich, aber es funktioniert soGrüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
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ß
TobiasZwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]
-
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 malGeändert von Nico Graichen (05.10.07 um 08:13 Uhr)
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Hallo Nico,
ja wie gesagt, die GAC halte ich auch, aus den von dir angeführten Gründen, für keine gute Lösung.
Ja, auf diese Frage habe ich gewartet.Aber wieso willst du die DLLs in ein Unterverzeichnis packen? Der Sinn ist mir nicht ganz klar
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ß
TobiasZwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]
-
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
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]
-
Ich hab dir mal eine kleine Solution angehängt...
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
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ß
TobiasZwei Dinge sind unendlich, das Universum und Die menschliche Dummheit, nur mit dem Zweiten bin ich mir noch nicht ganz sicher! - [Albert Einstein]
Ähnliche Themen
-
[IE7 Problem] Problem mit ul/li Höhen im IE7 bei Verwendung eines vertikalen Menüs
Von josDesign im Forum CSSAntworten: 0Letzter Beitrag: 11.01.11, 21:40 -
Problem: Flash MX (7.1) exportiert meine Fla nicht mehr - dringendes Problem
Von Lukasz im Forum Flash PlattformAntworten: 4Letzter Beitrag: 22.03.06, 20:50 -
Problem mit hover- background ändern & Problem bei Reload
Von ollioollio im Forum CSSAntworten: 0Letzter Beitrag: 06.10.04, 14:03 -
PROBLEM! Pinnacle 2 GB Begrenzung Windows 2000 DC 50 PROBLEM!
Von hennym im Forum Videoschnitt, Videotechnik & -produktionAntworten: 6Letzter Beitrag: 17.09.03, 22:09 -
Problem mit PopUp (Ja ich weiss Suche benutzten, hab ein ganz anderes Problem)
Von killkrog im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 13.06.02, 12:29





Zitieren


Login





