Laden...

References, aus welchem Verzeichnis?

Erstellt von thomas.at vor 18 Jahren Letzter Beitrag vor 16 Jahren 2.840 Views
T
thomas.at Themenstarter:in
111 Beiträge seit 2005
vor 18 Jahren
References, aus welchem Verzeichnis?

Hallo

ich habe ein Projektmappe mit mehreren Projekten. Jetzt wird aus Projekt A Projekt B aufgerufen. Dazu habe ich eine Using-Anweisung und die Referenz auf das Projekt B in Projekt A eingefügt. Nun soll aber auch aus Projekt B auf Projekt A zugegriffen werden. Hier konnte natürlich nicht das Projekt direkt eingebunden werden, da ja sonst eine "Ring-Refernez" entstehen würde. Also habe ich die DLL von Projekt A direkt eingebunden (VS 2005). Dies funktioniert auch einwandfrei. Allerdings weiss ich eigentlich nicht, aus welchem Verzeichnis ich die DLL laden soll:

\bin\debug
\bin\release
\obj\debug
\obj\release

In jedem dieser Verzeichnisse liegt die DLL vor. Könnt Ihr mir hier bei einen Tip geben, oder ist das reine Geschmackssache?

mfG Thomas

D
81 Beiträge seit 2005
vor 18 Jahren

Naja die dll ausm bin Verzeichnis nehmen, das ist ja das Arbeitsverzeichnis. Ob nun Release oder Debug hängt davon ab ob du das ganze debuggst oder halt releast, je nachdem nimmt er das entsprechende Verzeichnis.

R
51 Beiträge seit 2005
vor 17 Jahren

Ich habe ein ähnliches Problem. Angenommen jemand gibt mir seine Assemblies zu seinem Projekt (Projekt A) in Debug- und Release-Build. Diese Assemblies möchte ich in mein Projekt (Projekt B) einbinden, ohne die Dlls am GAC anzumelden.

Im Visual Studio mache ich einen Rechtsklick auf mein Projekt B, waehle Add Reference aus und kann dann mittels Browse eine Assembly auswaehlen. Nehme ich nun die Debug oder die Release Assembly? Die Auswahl die ich treffe, gilt in meinem Projekt B fuer den Debug und Release-Build! Ich kann nicht sagen, dass die Debug-Assembly von Projekt A in meinem Projekt B im Debug-Build und die Release-Assembly von Projekt A in meinem Projekt B im Release-Build verwendet werden soll.

Zu dArignac:

Naja die dll ausm bin Verzeichnis nehmen, das ist ja das Arbeitsverzeichnis.

Hier stimme ich ueberein.

Ob nun Release oder Debug hängt davon ab ob du das ganze debuggst oder halt releast, je nachdem nimmt er das entsprechende Verzeichnis.

Er nimmt nicht das Verzeichnis, sondern man muss es explizit angeben. Du meinst bestimmt den Fall, wenn man bei Add Reference ein anderes Projekt angibt.

S
8.746 Beiträge seit 2005
vor 17 Jahren

Zyklische Referenzen werden auch per Hand nicht gehen (Versionsproblematik). Sie sind zudem ein sicheres Zeichen für schlechtes Design bzw. Packaging.

Am besten immer die Dll aus dem bin-Verzeichnis nehmen. So werden Dritt-Dlls auch sauber eingebunden (obj enthält immer wirklich nur die zu compilierende Dll, während bin auch die Referenz-Dlls enthält).

Ob Debug oder Release ist jedem selbst überlassen. Man kann beliebig mischen.

R
122 Beiträge seit 2007
vor 16 Jahren

Ähnliches Problem (mit VS 2005 Prof.):
Ich habe eine Projektmappe mit 4 Projekten und jeweils eigenen Namespaces:
A
B, ist abhängig von A und C
C, ist abhängig von A
D, ist abhängig von A und B

Startprojekt (eine Windows-Anwendung) ist D. Die Projekte A, B und C sind dll's. In allen Projekten sind die Verzeichnisse für Debug auf einen gemeinsamen Debug-Ordner eingestellt. Dito gibt es für Release einen gemeinsamen Release-Ordner.

Die Verweise verweisen in den Projekten auf die dll's in dem Debug-Ordner.

So weit so schön. Es läuft alles wunderbar beim Compilieren in der Debug-Konfiguration und die Buildreihenfolge ist auch korrekt, ebenso die Einstellungen im Konfigurationsmanager.

Und jetzt kommen meine Verständnisprobleme:

Wenn ich (in der Menüleiste "Standard") statt Debug nun Release auswähle, "Projektmappe neu erstellen" anklicke, dann werden die Releasefiles auch erstellt. Wähle ich nun wieder Debug dann ebenso, Wähle ich dann aber nochmals Release, dann können einige Verweise nicht aufgelöst werden. Klicke ich dann aber die entsprechenden Verweise an (die haben ein gelbes Warn-Icon), dann werden sie sofort wieder richtig aufgelöst und ich kann das entsprechende Projekt einzeln compilieren. Bei erneutem Versuch von "Projektmappe neu erstellen" geht das Spiel von vorne los. Bei manchen dieser Buildläufe wurden auch schon die Verweise ohne mein zutun vom Debug- auf den Releaseordner geändert. Ebenso sind beim Releasebuildvorgang bestimmte dll's nicht überschreibbar weil sie angeblich von einem anderen Prozess geöffnet sind (Hinweis: ich entwickele lokal). Was passiert da?

Nächste Frage: Ich würde gerne mit einem einzigen Buildvorgang sowohl die Releasefiles, als auch die Debugfiles erzeugen. Geht das nur über "Erstellen->Batch erstellen...", dann sämtliche Konfigurationen anklicken und "neu erstellen" drücken? Oder gibt's auch einen anderen (einfachen) Weg?

Und noch'n Verständnisproblem: Wenn ich die Files für Debug erstelle, hätte ich gerne die Verweise auf die Debugfiles. Und wenn ich die Releasefiles erstelle, dann will ich die Verweise auf die Releasefiles. Das würde aber bedeuten, dass ich bei einem Wechsel von Debug auf Release und umgekehrt jedesmal die Verweise ändern muss. Das kann doch wohl nicht sein. Oder übersehe ich da etwas ganz Grundsätzliches?

F
10.010 Beiträge seit 2004
vor 16 Jahren

Bei solchen Projekten nicht die DLL's selber als Verweis einfügen, sondern
auf die 3. Seite "Projekte" gehen, und da auswählen.

Dann nimmt er immer die aktuell kompilierten, und vorallem kann seine
Buildreihenfolge erstellen.

R
122 Beiträge seit 2007
vor 16 Jahren

Danke, hat mir sehr geholfen!