Кто поможет по Publisher?
Atom
29.08.2011
Mikhail Sukhov


На Codeplex сейчас лежит программа Publisher, которая помогает собирать архивы (те самые, что выкладываем на box). В ней написан метод PublishHelper.StartCompile, который компилирует примеры:

Код
public static void StartCompile(string slnFile)
		{
			StartProcess(_devenvPath, "/build Debug {0}".Put(slnFile));


			//
			// ÷ñÒ1096190525êÖ0õæ÷http://www.roelvanlisdonk.nl/?p=1802
÷ñÒ1096190525êÖ1õæ÷
			//

			//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 попадают в несобираемом состоянии.

Теги:


Спасибо:


Sergey Masyura

Фотография
Дата: 29.08.2011
Ответить


Mikhail Sukhov
На Codeplex сейчас лежит программа Publisher, которая помогает собирать архивы (те самые, что выкладываем на box). В ней написан метод PublishHelper.StartCompile, который компилирует примеры:

Код
public static void StartCompile(string slnFile)
		{
			StartProcess(_devenvPath, "/build Debug {0}".Put(slnFile));


			//
			// ÷ñÒ386808609êÖ1õæ÷http://www.roelvanlisdonk.nl/?p=1802
÷ñÒ386808609êÖ2õæ÷
			//

			//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 попадают в несобираемом состоянии.



http://msdn.microsoft.co...rectstandardoutput.aspx

This can be quite easily achieved using the ProcessStartInfo.RedirectStandardOutput property. A full sample is contained in the linked MSDN documentation; the only caveat is that you may have to redirect the standard error stream as well to see all output of your application.

Код

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();
Спасибо:

esper

Фотография
Дата: 13.10.2011
Ответить


Судя по этой теме, devenv.exe для этой задачи не лучшее решение, сделал вариант с devenv.com
Спасибо: Mikhail Sukhov Alexander

Alexander

Фотография
Дата: 13.10.2011
Ответить


esper
Судя по этой теме, devenv.exe для этой задачи не лучшее решение, сделал вариант с devenv.com



Может вообще MSBuild будем использовать? Он вроде как заменитель devenv.com =)
Спасибо:

esper

Фотография
Дата: 13.10.2011
Ответить


Начинал делать с помощью API MsBuild с компиляцией из самой программы, но возникли проблемы с версиями фреймворка, поэтому пока сделал версию с devenv.com.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy