У меня есть этот код:
var code = @"public class Abc { public string Get() { return ""aaaaaaaaaa""; }}";
var options = new CompilerParameters();
options.GenerateExecutable = false;
options.GenerateInMemory = false;
var provider = new CSharpCodeProvider();
var compile = provider.CompileAssemblyFromSource(options, code);
var type = compile.CompiledAssembly.GetType("Abc");
var abc = Activator.CreateInstance(type);
var method = type.GetMethod("Get");
var result = method.Invoke(abc, null);
ut = result.ToString();
код переменной в этом случае выполняется правильно, но если я сделаю что-то другое, например:
var code = @"using System; public class Abc { static string Get() { return System.DateTime.Now}}";
Он не выполняется и выдает следующую ошибку: Не удалось загрузить файл или сборку «file:///C:\Windows\TEMP\504kbl2w.dll» или одну из его зависимостей. Система не может найти указанный файл
Почему это происходит? Как я могу это исправить?
Решение проблемы
Код терпит неудачу/не может быть скомпилирован, потому что он содержит три проблемы:
- Метод должен быть общедоступным
- Возвращаемое значение не
string
похоже на указанное - Отсутствие точки с запятой в методе
Исправьте это так, чтобы он заработал:
var code = @"using System; public class Abc { public static string Get() { return System.DateTime.Now.ToString(); } }";
Вы должны проверить ошибки после компиляции кода compile.Errors.
Комментариев нет:
Отправить комментарий