| 

.NET C# Java Javascript Exception

3
Situation:
Projekt A referenziert Projekt B wird von Projekt A referenziert.
Projekt C wird von Projekt B referenziert, wird aber erst zur Laufzeit geladen und hat somit keine 'echte' Abhaengigkeit zu Projekt B, wird aber trotzdem - wie ich es erwartet habe - in das Ausgabeverzeichnis von Projekt B kopiert.

Somit ergibt sich:
ProjB\bin\ProjC.dll
und
ProjA\bin\ProjB.dll,
aber leider wird Projekt C nicht in das Ausgabeverzeichnis von Projekt A kopiert.

Ich brauch aber (wegen des dynamischen Ladens, was ja auch zur Laufzeit von Projekt A innerhalb von ProjektB passiert) ProjC.dll auch bei ProjektA! Wie kann ich dieses Verhalten erreichen?

Nachtrag: Ich möchte nicht manuell die Referenz von ProjektA auf ProjektC setzen! Das führt zwar zum 'richtigen' Ergebnis, aber ist nicht Sinn er Sache von Referenzen.
28.07.2011
BrucklynBoy 41 3
2 Antworten
3
Generell bietet es sich an ein gemeinsames Ausgabeverzeichnis für alle Assemblies in den Projekteigenschaften anzugeben. Damit entfällt auch dein von dir genanntes Problem.
28.07.2011
Martin Fuchs 1,4k 9
1
Oder so, du warst einfach schneller :-)
ffordermaier 28.07.2011
Geht leider hier aus verschiedenen Gruenden nicht. (Client u. Server Projekte nicht mischen etc.)
BrucklynBoy 28.07.2011
Client und Server-Projekte sollen auch nicht gemischt werden, aber alle Client-DLLs und alle Server-DLLs kannst du doch jeweils in ein gemeinsames Verzeichnis legen.
Martin Fuchs 28.07.2011
Ja, aber es gibt Assemblies, die sind fuer beide ;)
BrucklynBoy 28.07.2011
1
Hallo BrucklynBoy,

dass überhautpt Referenzen kopiert werden, liegt daran, dass deine Referenzen in den Properties CopyLocal (Lokale Kopie bei einem deutschen VS) == true haben.
Wenn Du C nach A kopieren willst, dann mach das doch über einen PostBuild-Event (in den Projekteigenschaften unter Buidl kannst Du Pre- und PostBuild Steps eintragen).
Stell Dir das PostBuild Skript als Batchskript vor, ein einfaches xcopy reicht. Um das Verzeichnis usw. zu bestimmen, bietet das VS da ein paar kleine Makros an. Dann kannst Du einfach deine Dll per xcopy ins Ausgabeverzeichnis von A kopieren.

zu überlegen ist dann aber auch, ob Du Dir nicht gleich ein Deploy-Verzeichnis einrichtest, in das Du die Ausgabe aller Projekte per PostBuild Step reinkopierst. Dann hast alles immer an einem wohldefinierten Platz.

EDIT in Bezug auf deinen Kommentar:
...waehrend des Builds aufzuloesen.

Dann würde ich Dir ein Make-Tool empfehlen, denn Dateien kopieren mag zukünftig nicht das Einzige sein, was während des Builds erledigt werden muss. Und dann streust Du die Kopiertasks nicht in mehrere PostBuild-Steps, sondern machst Dir ein anständiges Makefile. Folgende fallen mir spontan ein:

  • MSBuild (ist ja bei VS schon mit dabei, eine .csproj ist ein msbuild-Skript)
  • NAnt, Klassiker in .NET Variante
  • NPanday, wobei ich das eher als ein "Building-the-Build" Tool klassifiziere und zum Dateien kopieren alleine zuviel ist

Viel Erfolg
Florian
28.07.2011
ffordermaier 8,4k 3 9
Hi!

Wenn ich manuell PostBuild Skripte pflege kann ich auch gleich die Referenzen direkt einfuegen. ;)

Und das mit Deploy ist hier schon so.

Ich hab halt nach einer Moeglichkeit gesucht, [b]allgemein[/b] diese kaskadierenden Referenzen waehrend des Builds aufzuloesen.

Danke trotzdem :)
BrucklynBoy 28.07.2011
Hab meine Antwort mit Bezug auf Deinen Kommentar editiert. Vlt. hilft Dir das weiter.
ffordermaier 28.07.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH