2014-11-05 14 views
5

Ich baue eine Visual Studio 2010-Lösung durch Python mit einem Aufruf an Subprozess. Bei einem direkten Aufruf von der Kommandozeile dauert es devenv.com ~ 15 Sekunden um zu starten. Aber wenn es von Python aufgerufen wird, springt das auf ~ 1,5 Minuten.Inkrementelle Build mit MSBuild.exe

Natürlich hoffe ich, diese tote Zeit von unserem Build zu entfernen. Also entschied ich mich, MSBuild.exe (von .NET 4) zu testen. Es sieht so aus, als ob MSBuild.exe sofort ausgeführt wird. Aber ... es scheint jedes Mal einen vollen Build zu machen und nicht inkrementell.

Der Befehl Ich verwende ist

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" "C:\path\to\my\project.sln" /target:build /maxcpucount:8 /property:Configuration=Release 

Es scheint, wie dies eine inkrementelle Build unterstützen sollte. Aber ich habe Beiträge online gesehen, die darauf hinweisen, dass msbuild möglicherweise nicht in der Lage ist, einen inkrementellen Build wie diesen zu unterstützen.

Ist das möglich? Wenn ja, was mache ich falsch?

Update:

Ich habe in diese ein bisschen mehr lesen.

Basierend auf

http://msdn.microsoft.com/en-us/library/ms171483.aspx

und

http://www.digitallycreated.net/Blog/67/incremental-builds-in-msbuild-and-how-to-avoid-breaking-them

Es scheint, wie ich die Input- und Output-Eigenschaften festgelegt in meinen .vcxproj Dateien benötigen. Beim Auschecken meiner Dateien fehlen diese tatsächlich.

Wann würden sie generiert werden? Die meisten meiner .vcxproj-Dateien wurden von Visual Studio 2008 konvertiert. Aber ich habe auch ein neues Projekt erstellt, dem auch die Eigenschaften Input und Output fehlen.

Erstellt VS2010 keine Projekte mit diesen Eigenschaften?

Update: Wir haben seit Upgrade auf VS 2013. Jetzt unterstützt Msbuild inkrementelle Builds. Das Problem mit VS 2010 wurde nie gelöst.

+1

Wo haben Sie Informationen gesehen, dass MSBuild inkrementelle Build nicht unterstützt? Könnten Sie URL oder Zeiger wie Sie es finden? –

+0

Dies ist der Post, den ich gefunden habe. https://social.msdn.microsoft.com/Forums/vstudio/en-US/8123dce6-7177-4fd7-b59c-51ef1359e60d/msbuild-task-is-not-incremental. Der Punkt, der mich glauben ließ, dass ein inkrementelles Build nicht unterstützt wurde, war "Weder MsBuild als System, noch MSBuild als Task bieten ein Mittel, um die Ein- und Ausgänge in Bezug auf eine .sln zu kennen, die gebaut wird." Aber ich bin unklar, wie genau diese Aussage ist. Daher diese Frage. –

Antwort

2

Ich denke, die Tatsache, dass inkrementelle Builds werden nicht unterstützt eine falsche Aussage ist aus nach offiziellen Quellen, Managed Incremental Build diese Funktion und wurde in VS2010 SP1 enthalten

Wir zunächst die verwalteten inkrementellen Build-Funktion in VS2008 eingeführt. In VS2010 konnten wir die verwaltete inkrementelle Buildfunktion mit dem Buildsystem, das zu MSBuild verschoben wird, nicht erneut implementieren. Wir haben starke Kundenanfragen für diese Funktion erhalten. Als Ergebnis haben wir diese Funktion re-implementiert und es ist in VS2010 SP1 enthalten.

Andere Lösungen fand ich auf Web

  • Projekte sollten schrittweise bereits bauen (nur sicherstellen, dass Sie Sie bauen statt Rebuild). Der beste Weg zu prüfen, ob das inkrementelle Gebäude funktioniert, besteht darin, den Build von der Befehlszeile aus auszuführen. Die zweite Zeit, die Sie es bauen, sollte fast keine Zeit brauchen.

    Wenn die Dinge immer noch neu aufgebaut werden, dann haben Sie vielleicht Ihre Projekte in irgendeiner Weise geändert , die mit der Build-Reihenfolge versaut ist. Ein Blick auf die Build-Protokolle (über die Option/v) kann Ihnen helfen, den Zeiger auf , was ist los.

  • Ein anderer Grund, der Probleme beim inkrementellen Build verursachen kann, ist GenerateResource.TrackFileAccess Property Diese API unterstützt die .NET Framework-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. Ruft einen Schalter ab, der angibt, ob Dateizugriffsmuster protokolliert werden sollen, oder legt diesen fest.
+1

Ahhhh .... das macht Sinn. Ich hatte Service Pack 1 nicht. Was für ein ungewöhnliches Feature, um die ursprüngliche Version zu verlassen. –

+0

@ShaneGannon einverstanden :)! –

Verwandte Themen