2016-11-08 10 views
0

私のプロジェクト要件のため、ソリューションファイルのパス、ターゲットフレームワーク、およびその他の入力パラメータを受け入れるアプリケーションを作成し、msbuild.exeを私が与えたカスタムパス。プログラムでmsbuild.exeを使用して.NETソリューションを構築し、ログを出力する

私は以下のようにしています。

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(); 

おかげで、 シヴァ

+0

*ソリューションファイルのパス、ターゲットフレームワークおよび他の入力パラメータとのMSBuildを呼び出す*バッチファイルのように聞こえる、つまりあなたは本当にそのためのアプリケーションが必要なのでしょうか?また、 "msbuildをプログラムで検索"すると、必要な情報がすべて見つかります。 – stijn

+0

ありがとうStijn。私はmsbuild.exeを呼び出し、ソリューション名を渡すコードを書いた。ビルドが成功しています。しかし、私はログファイルにログを書き込むことができません。それに応じて私の質問を更新しました –

+0

再生できません。このコードは確かにログファイルを生成します。おそらく、間違った場所を探しているだけです。完全なパスを指定していないので、ログファイルは現在の作業ディレクトリに入ります。 – stijn

答えて

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. 
関連する問題