基于NET FrameWork实现,函数如下:
<span style="white-space:pre"> </span> /// <summary>
/// 编译项目
/// </summary>
/// <param name="sourcePath">XXX\X/sln</param>
/// <param name="buildPath">c:/output</param>
/// <returns></returns>
public bool ComplierPriject(string sourcePath, string buildPath,out string complierReturnMsg)
{
string str = @"d:\compile.bat";
string strexe;
Process p = new Process();
bool isSuccess = false;
complierReturnMsg = "";
try
{
if (File.Exists(str))
{
File.Delete(str);
}
FileStream fs = new FileStream(str, FileMode.Create);
strexe = ConfigurationManager.AppSettings["FrameworkFilePath"];
strexe = strexe + "msbuild " + sourcePath + @" /t:Rebuild /property:WarningLevel=4;OutDir=" + buildPath+@"\";
byte[] str1 = ASCIIEncoding.Default.GetBytes(strexe);
fs.Write(str1, 0, str1.Length);
fs.Close();
p.StartInfo = new ProcessStartInfo(str);
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
while (!p.StandardOutput.EndOfStream)
{
string line = p.StandardOutput.ReadLine();
complierReturnMsg += line + "\r\n";
if (line.Contains("已成功生成") || line.Contains("Build succeeded"))
{
isSuccess = true;
}
if (line.Contains("生成失败") || line.ToUpper().Contains("Build FAILED".ToUpper()))
{
isSuccess = false;
}
}
if (!isSuccess)
{
complierReturnMsg = "编译失败!\r\n" + complierReturnMsg;
}
else
{
complierReturnMsg = "编译成功!\r\n" + complierReturnMsg;
}
}
catch (Exception ex)
{
com.log.Loger.Debug("ComplierPriject", ex);
}
finally
{
p.Close();
}
return isSuccess;
}