Wie erhalte ich das Buildsystem von Visual Studios, um nicht verwaltete Abhängigkeiten von verwalteten DLLs zu verstehen?

9

Beim Erstellen von verwaltetem Code kopiert Visual Studio korrekt (und rekursiv) DLLs von referenzierten verwalteten Projekten in den Ausgabeordner des zu erstellenden Projekts.

Wenn jedoch eine dieser Referenzen eine verwaltete DLL ist, die von nicht verwalteten DLLs abhängt, werden diese nicht verwalteten DLLs nicht in den Ausgabeordner kopiert, obwohl ihre entsprechenden Projekte in derselben Lösung enthalten sind und als Abhängigkeiten der verwalteten DLL aufgeführt sind .

Ich stelle fest, dass dieses Problem gelöst werden kann, indem alle Projekte den gleichen Ausgabeordner verwenden. Wir machen das schon für die meisten Projekte, aber wir ziehen es vor, Unit-Test-Output-Ordner getrennt zu halten, was das obige Problem für Unit-Tests verursacht, die eine verwaltete Dll mit nicht verwalteten Abhängigkeiten verwenden.

Die Lösung, die wir gerade verwenden, ist ein Pre-Build-Event, um die notwendigen DLLs zu kopieren, aber das kostet Zeit und ist fehleranfällig, da es für jedes Projekt mit der verwalteten DLL wiederholt werden muss.

Ich würde daher gerne wissen, ob es eine Möglichkeit gibt, das Build-System zu verstehen, dass es immer die nicht verwalteten Abhängigkeiten der verwalteten DLL kopieren sollte, wenn es sich entscheidet, die gemanagte DLL zu kopieren?

    
Ziphnor 30.12.2009, 13:05
quelle

1 Antwort

5

Eine Problemumgehung scheint darin zu bestehen, dem verwalteten DLL-Projekt einen weiteren Knoten hinzuzufügen, die nicht verwaltete DLL zu benennen und die Build Action="None" zu setzen und nach Output Directory zu kopieren="Copy if Newer".

Edit: Für den Aufbau eines C ++ / CLR-Projekts denke ich, dass das funktionieren würde:

Fügen Sie den Knoten hinzu und legen Sie sein Build-Tool auf Benutzerdefiniertes Build-Tool fest. Setzen Sie dann auf der Seite "Benutzerdefinierter Build-Schritt" den -Befehl auf kopieren $ (InputPath) $ (OutDir) und die Ausgaben auf $ (OutDir) \ $ (InputFileName) . Sieht so aus, als müsste das funktionieren.

    
Tarydon 30.12.2009, 13:22
quelle