Кто поможет по Publisher?

Кто поможет по Publisher?
Atom
8/29/2011
Mikhail Sukhov


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

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


			//
			// ÷ñÒ1490377510êÖ0õæ÷http://www.roelvanlisdonk.nl/?p=1802
÷ñÒ1490377510êÖ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 попадают в несобираемом состоянии.

Tags:


Thanks:


Sergey Masyura

Avatar
Date: 8/29/2011
Reply


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

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


			//
			// ÷ñÒ727472425êÖ1õæ÷http://www.roelvanlisdonk.nl/?p=1802
÷ñÒ727472425êÖ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.

Code

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

esper

Avatar
Date: 10/13/2011
Reply


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

Alexander

Avatar
Date: 10/13/2011
Reply


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



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

esper

Avatar
Date: 10/13/2011
Reply


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


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy