2009-11-11 16 views
7

Ich möchte eine Lösung kompilieren, indem Sie den Lösungsdateipfad (.sln-Datei) und den Erstellungsmodus (debug, release) übergeben. Ich möchte nicht einen Befehlszeilenprozess wie devenv.exe oder msbuild.exe aufrufen, stattdessen möchte ich eine API verwenden und wissen, ob es Kompilierungsfehler gab.Wie programmiere ich eine Visual Studio-Lösung?

Ist es möglich? Bitte stellen Sie Beispiele zur Verfügung, wenn Sie denken, dass Sie wissen, wie man das macht.

Antwort

3

Sie müssen irgendwann einen Prozess starten, um die Kompilierung durchzuführen, Sie können auch einen Prozess starten, um die Kompilierung zu starten. Es wird viel einfacher als mit einer API zu kämpfen.

Bearbeiten Andrew gibt einige gute Ratschläge darüber, wie Sie darüber gehen könnten, aber ich denke immer noch, dass es ein Fehler ist.

+0

Es ist erstaunlich, wie einfach ein Exit-Code mit Skript sein kann. (Ich denke, dass sich zu viele Leute nicht daran erinnern, wie einfach und einfach Batch-Dateien funktionieren ... dann ist es wieder ein paar Jahre her, dass DOS populär war, vielleicht wissen sie es einfach nicht.) –

+0

Fair genug, das klingt tatsächlich viel einfacher, dass die API verwendet. Ich denke, es ist eine Schande, es gibt keine einfache. NET-API, obwohl mit einem richtigen Objekt zurückgegeben, wo wir auf Fehler testen konnten. etc. Vielen Dank – clems

+0

Raten Sie verpasst die Build Engine APIs, die itowlson hingewiesen http://msdn.microsoft.com/en-us/library/microsoft.build.buildengine.engine.buildprojectfile.aspx –

2

Wie itowlson wies darauf hin, Sie auch von einem Skript wie eine Batch-Datei können Sie die Build Engine APIs

... von MSDN ...

// Build a project file 
bool success = engine.BuildProjectFile(@"c:\temp\validate.proj"); 

Sie MSBuild nutzen könnten. Und überprüfen Sie einfach die ErrorLevel für etwas anderes als 0 ... oder Sie können Spaß mit den APIs haben.

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ MSBuild.exe

.. von msbuild.exe /?

...

Microsoft (R) Build Engine Version 2.0.50727.4927 [Microsoft .NET Framework, Version 2.0.50727.4927] Copyright (C) Microsoft Corporation 2005. Alle Rechte vorbehalten.

Syntax: MSBuild.exe [Optionen] [Projektdatei]

...

Beispiele:

MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release 
    MSBuild MyApp.csproj /t:Clean /p:Configuration=Debug 
+2

Da er speziell die MSBuild-Befehlszeile nicht verwenden möchte, lohnt es sich, ihn auf die MSBuild-API zu verweisen, insbesondere auf http://msdn.microsoft.com/en-us/library/microsoft.build.buildengine. engine.buildprojectfile.aspx. – itowlson

+0

Guter Punkt ... Ich würde wahrscheinlich nur die exe mit einem Process.Start() umwickelt, aber ich konnte die Vorteile in der API sehen. –

1

hier ist ein article programmatisch mit dem C# -Compiler zu diskutieren. Hier ist eine article diskutieren das SLN-Dateiformat. Die SLN-Datei ist eine XML-Datei, daher ist sie ziemlich einfach zu lesen.

0

Ich würde auch vorschlagen, die MSBuild API zu verwenden. Es scheint ganz gut zu funktionieren. Es hat sich jedoch seit .NET4 und VS2010 erheblich geändert.

Verwandte Themen