2009-05-13 14 views
9

Ich habe ein C# -Projekt A, das eine .net-Wrapper-DLL und eine native DLL verwendet. Ich füge die .NET-Wrapper-DLL zur Referenzliste von Projekt A hinzu. Da die Wrapper-DLL nur mit der nativen DLL arbeitet, wenn sie sich im selben Ordner befindet, sollte die native DLL in das Ausgabeverzeichnis von Projekt A kopiert werden Fügen Sie die native DLL als Inhaltsdatei unter Projekt A hinzu und legen Sie die Kopieraktion so fest, dass sie kopiert wird, falls sie neuer ist. Das ist in Ordnung.Warum die native DLL nicht in das Ausgabeverzeichnis kopiert wird

Wenn ein C# -Projekt B direkt auf Projekt A verweist, kopiert VS alle abhängigen Dateien, die von Projekt A verwendet werden, in das Ausgabeverzeichnis von Projekt B. Dies bedeutet, dass die Wrapper-DLL und die native DLL in die Ausgabe von Projekt B kopiert werden Verzeichnis auch. Das funktioniert auch gut.

Dann habe ich noch ein C# -Projekt C, das nur direkt auf Projekt B verweist, nicht auf Projekt A. Es ist interessant zu sehen, dass VS die native DLL nicht in das Ausgabeverzeichnis von Projekt C kopiert, was ich beabsichtigen, etwas anderes zu tun, wenn Projekt C die Funktionalität von Projekt B verwendet und nach der systemeigenen DLL sucht, um mit der Wrapper-DLL zu arbeiten, sie wird es nicht finden.

Kann jemand erklären, warum VS die native DLL nicht in das Ausgabeverzeichnis von Projekt C kopiert? Was ist der Mechanismus zum Kopieren von kettenabhängigen Dateien in VS? Danke vielmals.

Antwort

6

Im Grunde propagieren die referenz-Ketten nicht und es liegt an der obersten Assembly (der exe, der Website usw.) sicherzustellen, dass sie alles hat, was sie benötigt, entweder lokal oder in (zum Beispiel mit verwalteten DLLs)) der GAC. Sie müssen die Dateien zur exe/Website als "Kopie zur Ausgabe" hinzufügen.

+0

Können Sie etwas konkreter, wie „die Dateien auf die exe in den (wir sprechen über exe nicht Website hier) als Kopie der Ausgabe "? Danke vielmals. – Steve

+1

Sie sollten nur die erforderlichen Deployment-Dateien im exe-Projekt wiederholen und sie zum Kopieren in die Ausgabe markieren. –

0

Warum nicht einfach die native DLL als Referenz in Projekt A hinzufügen? Dadurch wird sichergestellt, dass es immer enthalten ist, wenn andere Bibliotheken A verwenden.

Edit: Das funktioniert nur, wenn die DLL eine COM- oder .NET-Komponente ist.

+0

Dies ist eine ausgezeichnete Idee. Zumindest, das ist WIE ICH VS WERKE ÜBERNEHMEN würde. Ich nicht – Eric

Verwandte Themen