2016-11-08 1 views
0

Aufgrund meiner Projektanforderungen muss ich eine Anwendung erstellen, die den Lösungsdateipfad, Zielframework und andere Eingabeparameter akzeptiert und die msbuild.exe auf einem aufrufen kundenspezifischer Pfad, den ich gab.Erstellen Sie meine .NET-Lösung mit Msbuild.exe program metically und geben Sie die Protokolle

Ich mache das wie unten.

var buildPath = @"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe"; 
     var solutionPath = @"D:\Siva\Sandbox\Samples\SandboxProject\SandboxProject.sln"; 
     var buildLogs = "/flp:Summary;Verbosity=minimal;LogFile=msbuild.sum"; 
     var process = new Process(); 
     process.StartInfo = new ProcessStartInfo(buildPath); 
     process.StartInfo.Arguments = " " + solutionPath + " " + buildLogs; 
     process.Start(); 

Danke, Siva

+0

* Lösung Dateipfad, Zielframework und andere Eingabeparameter und rufen Sie den msbuild * klingt wie eine Batch-Datei, das heißt Sie wirklich brauchen eine Anwendung für das? Wenn Sie nach "msbuild programmatically" suchen, finden Sie alle Informationen, die Sie benötigen. – stijn

+0

Danke Stijn. Ich schrieb den Code, um die msbuild.exe aufzurufen und den Lösungsnamen zu übergeben. Build wird erfolgreich ausgeführt. Aber ich kann die Protokolle nicht in Protokolldateien schreiben. Meine Frage wurde entsprechend aktualisiert. –

+0

Kann nicht reproduziert werden. Dieser Code erzeugt definitiv eine Logdatei. Wahrscheinlich suchen Sie nur an der falschen Stelle: Da Sie keinen vollständigen Pfad angegeben haben (was Sie tun sollten), geht die Logdatei in das aktuelle Arbeitsverzeichnis. – stijn

Antwort

0
I've followed the below approach. 
1) Created a Process which will invoke standalone msbuild.exe and passing the Solution Name, Dependencies as command arguments. 

Custom XML Build File: 

    <?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup>  
    <PackageDir>$(BuildPackageDir)..\packages</PackageDir> 
    </PropertyGroup> 
    <Target Name="RestorePackages"> 
    <RemoveDir Directories="$(PackageDir)" /> 
    <MakeDir Directories="$(PackageDir)" />  
    <Exec WorkingDirectory="$(BuildDir)" Command="NuGet.exe restore $(MSBuildSolutionDirectory) -OutputDir $(PackageDir)" /> 
    </Target> 
    <Target Name="Build"> 
     <CallTarget Targets="RestorePackages"/> 
    <MSBuild Projects="$(MSBuildSolutionDirectory)" Targets="Rebuild"/> 
    </Target> 
    </Project> 

My Command Arguments: 

    inputParameters.Append(" "); 
    inputParameters.Append(buildSourcePath); 
    inputParameters.Append(" "); 
    inputParameters.Append(Constants.PROPERTYCOMMAND); 
    inputParameters.Append("BuildSolutionDirectory="); 
    inputParameters.Append('"'); 
    inputParameters.Append(buildSolutionName); 
    inputParameters.Append('"'); 
    inputParameters.Append(" "); 
    input.Parameteters.Append(Constants.PROPERTYCOMMAND); 
    inputParameters.Append("BuildPackageDir="); 
    inputParameters.Append('"'); 
    inputParameters.Append(MSBuildSolutionDirectory); 
    inputParameters.Append('"'); 
    inputParameters.Append(" "); 
    inputParameters.Append(buildLogs); 
    inputParameters.Append(" "); 
    inputParameters.Append(Constants.PROPERTYCOMMAND); 
    inputParameters.Append("BuildDir="); 
    inputParameters.Append('"'); 
    inputParameters.Append(buildDirectory); 
    inputParameters.Append('"'); 

And then executes the process. 

    var process = new Process(); 
    process.StartInfo = new ProcessStartInfo(msBuildPath); 
    var frameworkType = Helpers.CheckProjectFramework(projectDirectory); 
    process.StartInfo.Arguments =  
    Helpers.BuildInputParameters(projectDirectory, frameworkType); 
    process.Start(); 

buildSourcePath -> .xml path 
MSBuildSolutionDirectory -> Root path of the .sln which we are going to build 
buildDirectory -> Location of the nuget.exe folder. 

And in parallel creating a Log files to get the build output. I'm able to build my application. 
Verwandte Themen