Делаю ide для языка C# на WinForms. При запуске отправляю файлу csc.exe исходники и путь где должен лежать будущий exe. Все работает, но как мне перехватить ошибку при неудачной компиляции?
Код того как я компилирую:
new Process() {
StartInfo = {
FileName=@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe",
Arguments=@"-out:" + SelectedFile.FullName + @".exe " + SelectedFile.FullName
}
}.Start();
код того как запускаю:
Process.Start(new DirectoryInfo(PathToFolderWithFiles).GetFiles(@"*.exe")
.Where(a => a.Name.Split('.')[0] == SelectedFile.Name.Split('.')[0])
.Single().FullName);
При неуспешной компиляции не создается файл exe. Хотелось бы получить источник ошибки.
Нет необходимости вызывать компилятор напрямую, для этого есть встроенный API (System.CodeDom.Compiler). Ошибки можно получить через свойство CompilerResults.Errors:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
namespace WindowsFormsTest1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var csc = new CSharpCodeProvider();
string filepath = "c:\\test\\Hello.cs";
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "c:\\test\\Hello.exe", true);
parameters.GenerateExecutable = true;
CompilerResults results = csc.CompileAssemblyFromFile(parameters, new string[]{filepath});
if (results.Errors.Count > 0)
{
textBox1.Text = "Errors: " + Environment.NewLine;
foreach (var err in results.Errors)
{
textBox1.Text += err.ToString() + Environment.NewLine;
}
return;
}
else MessageBox.Show("Компиляция завершена успешно!");
}
}
}
Можно в Console.SetOut
задать новый поток вывода и читать его в своей программе, анализируя вывод консоли.
Правда все таки лучше использовать API, как советуют ниже.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как сделать, что бы при неверном url происходила переадресация на главную страницу ? Я пытаюсь реализовать это добавлением в webconfig :
Надо полностью убрать рамку с groupboxЧтоб остались только элементы внутри
Подскажите литературу на русском языке по парсингу html с помощью AngleSharp?