2014-02-10 2 views
1

У меня есть файл main.cs в C: \ kaannos \ main.cs.csc.exe с аргументами не компилируется/работает из консольного приложения

моя строка путь_к_файл:

this.filePath = @"c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"; 

     startInfo.FileName = filePath;    
     startInfo.Arguments = "C:\\kaannos\\main.cs";    
     // startInfo.UseShellExecute = false; 
     Process.Start(startInfo); 

Мое консольное приложение показывает вверх и сразу после приходит csc.exe, но он просто всплывает и замыкаться. Я проверил папку и нет файла main.exe, поэтому он не скомпилировал его. Если я запустил эту команду из командной строки: csc C: \ kaannos \ main.cs, она работает. Я отключил свой UAC, поэтому мне не нужно запускать командную строку в качестве администратора для ее проверки, а также потому, что я не мог найти способ запуска процесса как администратора. Но похоже, что это не так, потому что UAC выключен? Любое решение?

+0

Какой у вас рабочий каталог? Он попытается написать результат в этом каталоге ... –

+0

Ничего себе, я смотрел везде, но не из рабочего каталога, я думал, что он напишет его в c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ like before из командной строки. Напишите ответ, и я его правильно помет! Благодаря! –

+0

http://msdn.microsoft.com/en-us/library/650ax5cx%28v=vs.110%29.aspx –

ответ

2

csc всегда будет записывать вывод в текущий рабочий каталог, если вы не укажете другое местоположение вывода с флагом /out.

Так что это не сработает, если у вас нет доступа на запись к текущему рабочему каталогу, если вы не указали /out (или измените рабочий каталог через ProcessStartInfo.WorkingDirectory). Если вы довольны тем, что записываете в рабочий каталог, тогда вы должны искать результат.

Кроме того, как отметил Ханс Passant в комментариях, вы должны рассмотреть другие программные способы генерации кода:

  • CSharpCodeProvider
  • Roslyn API, который в настоящее время в CTP, но это следующее поколение управляемый C# компилятор, который будет основой Visual Studio в будущем.
+0

Большое вам спасибо за этот отличный ответ! –