2017-10-20 3 views
0

Du zu einer seltsamen Abhängigkeitskette, die ich im Moment nicht brechen kann, möchte ich ein C++ - Projekt als "Post-Build" -Schritt von einem anderen C++ - Projekt in der gleichen Lösung erstellen.Verwenden von MSBuild-Task zum Erstellen eines anderen (C++) Projekts in derselben Lösung?

Ich weiß, wie MSBuild auf der Kommandozeile aufrufen, aber ich dachte, es könnte mehr Sinn zu verwenden, die MSBuild Aufgabe in integrierten machen nur die Build auf dem anderen Projekt auslösen:

my.vcxproj:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
... 
    <Target Name="BuildTheOtherProject" AfterTargets="Build"> 
     <MSBuild Projects="..\theother\theother.vcxproj" Targets="Build" Properties="Configuration=$(Configuration);Platform=$(Platform)"> 
     </MSBuild> 
    </Target> 
</Project> 

Dies scheint auf den ersten Blick gut zu funktionieren, aber wird dies weiterhin funktionieren (denke: paralleler Projektaufbau der vollständigen Lösung usw.) und übergebe ich die richtigen Werte an die MSBuild-Aufgabe?

Es gibt eine related question, die über die gleiche Sache für C# -Projekte fragt, und es scheint ein Problem mit csc zu geben (was für die vcxproj irrelevant ist), also frage ich mich, was die allgemeine Haltung dazu ist?

(Ich bin auf dem Visual Studio 2015 atm.)

+0

was meinst du "Ich frage mich, was die allgemeine Haltung dazu ist"? Sie konnten kein anderes Projekt erfolgreich erstellen? Ich habe Ihr Code-Snippet getestet und es erfolgreich erstellt. –

Antwort

1

Ja Sie die MSBuild-Aufgabe korrekt aufgerufen wird. Aber du solltest das nicht tun. Es ist ein schlechter Stil. Und mit diesem kleinen Trick, der sich in der .vcxproj-Datei verbirgt, stolperst du mit Sicherheit in der Zukunft. Geben Sie die Abhängigkeit richtig an: In der Lösungsdatei (.sln) und Visual Studio wird sichergestellt, dass die Datei in der richtigen Reihenfolge erstellt wird. Wenn Sie mehr Leistung wünschen, können Sie die Abhängigkeit mithilfe einer <ProjectReference> anstelle einer Lösungsdatei angeben, aber das ist ein anderes Thema.

In all meinen Jahren der Arbeit in Unternehmen mit sehr großen Code-Basen: Ein Trick wie dies wurde nie getan, und sollte nie.

+0

Und tatsächlich: Es schien zuerst gut zu funktionieren, nur um mit einem vollständigen Build-Lauf zu brechen, weil MSBuild dann tatsächlich eine zyklische Abhängigkeit entdeckte, mit der ich damit arbeiten wollte. Also funktionierte es in meinem Fall nicht und es sollte eine 'ProjectReference' gemacht werden (was momentan nicht möglich ist). Ich verachte Lösungsabhängigkeiten, sie sind schrecklich zu warten, wenn das Softwareprojekt mehr als eine Lösung enthält. Geh und geh ''ProjectReference' - aber zuerst muss ich hier die Projektstruktur aufräumen. –

+0

Btw .: Denken Sie über die Verwendung der MSBuild-Task in einem 'vcxproj' a 'hack' als solchen oder nur dann, wenn eine' ProjectReference' hätte funktionieren sollen? –

+0

Hallo. Ich würde in Betracht ziehen, eine MSBuild-Aufgabe in einem .vcxproj-Hack zu jeder Zeit zu verwenden. Viel schlimmer als die Kugel zu beißen und eine Lösungsabhängigkeit zu verwenden. So schlecht wie Lösungen (* .sln) sind, sind sie besser als das. –

Verwandte Themen