GOOGLE ADS

среда, 4 мая 2022 г.

Что не так с этим динамическим выполнением кода?

У меня есть этот код:

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» или одну из его зависимостей. Система не может найти указанный файл

Почему это происходит? Как я могу это исправить?


Решение проблемы

Код терпит неудачу/не может быть скомпилирован, потому что он содержит три проблемы:


  1. Метод должен быть общедоступным

  2. Возвращаемое значение не stringпохоже на указанное

  3. Отсутствие точки с запятой в методе


Исправьте это так, чтобы он заработал:

var code = @"using System; public class Abc { public static string Get() { return System.DateTime.Now.ToString(); } }";

Вы должны проверить ошибки после компиляции кода compile.Errors.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...