Кто поможет по 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));


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


Теги:


Спасибо:


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

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


http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.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