На Codeplex сейчас лежит программа Publisher, которая помогает собирать архивы (те самые, что выкладываем на box). В ней написан метод PublishHelper.StartCompile, который компилирует примеры:
public static void StartCompile(string slnFile)
{
StartProcess(_devenvPath, "/build Debug {0}".Put(slnFile));
//
// http://www.roelvanlisdonk.nl/?p=1802
//
//const string logFilePath = "build.log";
//using (var process = Process.Start(_devenvPath, "/Rebuild Debug {0} /out {1}".Put(slnFile, logFilePath)))
//{
// using (var sr = new StreamReader(new FileStream(logFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
// {
// while (!process.HasExited)
// {
// while (!sr.EndOfStream)
// Console.WriteLine(sr.ReadLine());
// Thread.Sleep(1000);
// }
// }
//}
}
Закомментированная часть - это попытка (неудачная, не знаю почему не работает) перенаправить вывод студии в консоль. Вывод нужен для того, чтобы узнать, нормально ли сейчас собирается пример или он выдает какие-то ошибки. Как следствие этого иногда возникает ситуация когда примеры на box попадают в несобираемом состоянии.
Kommentare (4)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
public static void StartCompile(string slnFile) { StartProcess(_devenvPath, "/build Debug {0}".Put(slnFile));
Process compiler = new Process(); compiler.StartInfo.FileName = "csc.exe"; compiler.StartInfo.Arguments = "/r:System.dll /out:sample.exe stdstr.cs"; compiler.StartInfo.UseShellExecute = false; compiler.StartInfo.RedirectStandardOutput = true; compiler.Start();
Console.WriteLine(compiler.StandardOutput.ReadToEnd());
compiler.WaitForExit();
Судя по этой теме, devenv.exe для этой задачи не лучшее решение, сделал вариант с devenv.com
Может вообще MSBuild будем использовать? Он вроде как заменитель devenv.com =)
Начинал делать с помощью API MsBuild с компиляцией из самой программы, но возникли проблемы с версиями фреймворка, поэтому пока сделал версию с devenv.com.