2010-09-15 6 views
6

Lets sagen, ich habe zwei Projekte A und B. A hängt von B. ich dies auf zwei Arten angeben:Unterschied zwischen Projekt und dll-Abhängigkeiten in .Net in dem letzten kompilierten Assembly

  • Fügen A und B in derselben Lösung und geben Sie B als Projektabhängigkeit für A an. Dies wird im Msbuild-Projekt von A als "ProjectReference" -Knoten angezeigt.
  • Fügen Sie einen Verweis auf die kompilierte DLL B als Abhängigkeit von A. in A des msbuild Projekt als „Referenz“ Knoten Dies zeigt sich

Meine Frage ist, wenn ich die Versammlung für A haben zu bauen, ist es gibt einen Unterschied in der endgültigen Ausgabe zwischen diesen beiden Methoden.

Ich habe versucht, ein paar einfache Projekte zu erstellen, die diese Beziehung modellieren und einen Vergleich versuchen - aber verschiedene Vergleichstools sagen mir verschiedene Dinge. Bevor ich etwas schreibe, das diese Dateien byteweise vergleicht, habe ich mich gefragt, ob ihr Leute etwas darüber wusstet. Insbesondere gibt es einen Unterschied im Verhalten der gebauten Assembly, wenn ich dll-Referenz anstelle einer Projektreferenz verwende.

Antwort

5

Wenn sich die B-Quellen des Projekts zwischen zwei Builds von Projekt A nicht geändert haben, gibt es keinen Unterschied im Verhalten der Ausgabe von Projekt A. Wenn sich jedoch Projekt-B-Quellen geändert haben, wird das Projekt B aus Projekt A neu erstellt, wenn Sie es als Projekt aus Projekt A referenzieren. Dieser Unterschied ist, was bestimmt Ihre Wahl, wie Projekt B aus Projekt A verweisen:

  • , wenn Sie besitzen die Quelle von Projekt B und Projekt A, und sie sind eng gekoppelt sind, oder wenn sie beide unter aktiv sind Entwicklung und Projekt B durchläuft oft Änderungen seiner öffentlichen Schnittstelle, Sie möchten Projekt B als Projekt referenzieren. Dies würde sicherstellen, dass Projekt A in seinem Build immer die aktuellste Ausgabe von Projekt B verwendet.

  • Wenn Projekt B eine externe Abhängigkeit ist, entwickeln Sie nicht selbst, oder Sie haben keine Quellen dafür oder wenn sie bereits ausgeliefert wurde und Sie keine modifizierte Version mit Projekt A versenden können, möchten Sie auf die Ausgabe des vordefinierten Projekts B verweisen, um sicherzustellen, dass Sie mit der gleichen Version von Projekt B entwickeln und testen wahrscheinlich auf den Computern Ihrer Benutzer.

+0

@Timwi - Danke für :-) gerade die Abhängigkeit Richtung Einstellung aus irgendeinem Grund ich es genau gegenüber dem Beispiel des OP schrieb –

+3

auch auf die Antwort, falls Ihr Projekt B abhängig hinzufügen auf sagen wir mal C. dll, wenn B als Projektabhängigkeit von A angegeben wird, bringt das Kompilieren von Projekt A automatisch die Abhängigkeiten von Projekt B mit (z. B. C.dll). Wenn Sie stattdessen einen Verweis auf die kompilierte DLL von B einfügen, wird C.dll nicht automatisch zu As Bin hinzugefügt, stattdessen müssen Sie alle Abhängigkeiten von B manuell hinzufügen. –

3

Das Hinzufügen als Projektverweis hat nur den Vorteil, dass die Baugruppe "B" bei Bedarf automatisch erstellt wird.

Sobald die Baugruppe "A" gebaut ist, gibt es keinen Unterschied mehr.