2013-04-10 7 views
0

У меня есть ниже код для создания проекта с использованием MSBuild:Держите окно консоли открытым с помощью C#

string process = sourcePath + @"\Application.sln /t:rebuild"; 
System.Diagnostics.Process csc = System.Diagnostics.Process.Start(@"C:\WINNT\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe",process); 

Этот код работал раньше, я не знаю, почему не работает больше.

Если я делаю то же самое выше CMD, он отлично работает, но не из VS.Net, окно консоли исчезает быстро, поэтому я не вижу сообщение об ошибке.

Если я отлаживать код, который я получил это: BasePriority = 'csc.BasePriority' threw an exception of type 'System.InvalidOperationException'

Есть ли способ, чтобы держать этот экран, чтобы я мог знать, что здесь происходит?

+0

Если он работал до 100%, вы должны перезагрузить компьютер ... –

+0

Вы пробовали положить контрольную точку на линии, которая бросает ошибку? – valverij

+0

@valverij см. Раздел 'Если я отлаживаю ...' – Somebody

ответ

3

Просто запустите процесс cmd с MSBuild.exe в качестве аргумента вместо прямого запуска exe-файла.

string process = @"C:\WINNT\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe " + sourcePath + @" \Application.sln /t:rebuild"; 
System.Diagnostics.Process csc = System.Diagnostics.Process.Start(@"%windir%\system32\cmd.exe", process); 
+0

Я не понимаю :(Мое приложение - это консольное окно, которое вызывает другое приложение для консольного окна. Последнее - это то, что мне нужно быть активным, чтобы я мог видеть ошибка – Somebody

+0

Процесс MSBuild.exe завершается сразу же после завершения сборки. Консоль, которую вы хотите увидеть, на самом деле является окном процесса cmd, которое запускало процесс MSBuild.exe. Я выполняю именно это: запустите процесс MsBuild из вновь созданного cmd консольное окно. Или вам нужно увидеть результат в консольных окнах вашего собственного процесса - это будет немного сложнее - вам нужно скопировать вывод этого процесса (бежит тихо) и вывести его на свою консоль –

+2

подумайте, что это должно be 'cmd.exe/K command_to_execute' – Amitd

2

Вы можете попытаться перенаправить вывод MSBuild вы начинаете использовать RedirectStandardOutput

Process compiler = new Process(); 
compiler.StartInfo.FileName = @"C:\WINNT\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe"; 
compiler.StartInfo.Arguments = sourcePath + @"\Application.sln /t:rebuild"; 
compiler.StartInfo.UseShellExecute = false; 
compiler.StartInfo.RedirectStandardOutput = true; 
compiler.Start();  

Console.WriteLine(compiler.StandardOutput.ReadToEnd()); 

compiler.WaitForExit(); 
+0

+1 Хороший подход @Amitd :) – Somebody

+0

У меня есть ошибка: 'MSBuild: ошибка MSB1008: может быть указан только один проект.« Почему это происходит, здесь есть только один проект. :( – Somebody

+1

Это происходит, когда у вас есть место на ваших путях. Нужны двойные кавычки вокруг него. См. Этот ответ http://stackoverflow.com/a/470659/158297, а также http://lajak.wordpress.com/2011/04/20/tfs-2010-msbuild-error-msb1008-only-one-project-can-be-defined/ – Amitd

Смежные вопросы