Мне нужен код, который компилирует код, который находится в моем TextBox (например). Я хочу сказать, что я хочу скомпилировать код после запуска программы. Как я могу это сделать?
Компилировать код С# в приложении
Ответ 1
См. статью:
http://support.microsoft.com/kb/304655
Вот пример кода, который они предоставляют:
var codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
var parameters = new CompilerParameters()
{
GenerateExecutable = true,
OutputAssembly = Output,
};
CompilerResults results = icc.CompileAssemblyFromSource(parameters, sourceString);
if (results.Errors.Count > 0)
{
foreach(CompilerError error in results.Errors)
{
textBox2.Text = textBox2.Text
+ "Line number " + error.Line
+ ", Error Number: " + error.ErrorNumber
+ ", '" + error.ErrorText + ";"
+ Environment.NewLine + Environment.NewLine
;
}
}
Как сказал в своем ответе Aliostad, будьте осторожны с этим решением. Вам нужно будет убедиться, что ваш скомпилированный код заканчивается в своем собственном AppDomain
, иначе вы будете испытывать утечки памяти.
См. этот связанный вопрос о том, как загрузить код в отдельный AppDomain
:
Как я могу предотвратить утечку памяти CompileAssemblyFromSource?
Ответ 2
Просто будьте осторожны, любой код, который скомпилирован и загружен, не может быть выгружен. Это может привести к утечке памяти , т.е. Если кто-то продолжает печатать и изменять код и компилировать его, сборки загружаются, и в конечном итоге вы исчерпаете память.
Одним из решений является создание второго AppDomain и загрузка сборки там, а когда это не нужно, выгрузите AppDomain.