Включая всегда изменение кода в активную программу - PullRequest
1 голос
/ 06 октября 2009

Возьмем следующую функцию в качестве примера:

void Changing(string var1, string var2, string var3)
{
}

У меня есть код, написанный в .txt файлах, и я хочу, чтобы он был динамически загружен в эту функцию. Потенциально код может отличаться при каждом вызове функции. Как я мог это сделать?

  1. Код в текстовых файлах на диске
  2. Код должен быть загружен динамически, не останавливая выполнение программы
  3. Код должен быть неотличим от кода, загруженного с самого начала, должен делать вид, будто он всегда был там.
  4. Местоположение файла для выполнения включено в var1.

Ответы [ 2 ]

5 голосов
/ 06 октября 2009

Вы не можете на 100% притворяться, что это было с самого начала; вам придется обойти это.

Если код находится во внешнем текстовом файле, у вас есть несколько вариантов:

  • используйте CSharpCodeProvider для компиляции кода во время выполнения; вам нужно было бы добавить лишний пух, чтобы сделать его четко определенным классом (предположительно, реализующим общий интерфейс); затем используйте отражение, чтобы создать экземпляр типа; да - и будьте осторожны, вы не можете выгрузить и т. Д.
  • дождитесь .NET 5.0 и надейтесь, что компилятор как служба останется
  • использовать Mono, где компилятор как услуга уже существует
  • запускать внешний файл как (например) скрипт Python через IronPython (обратите внимание, что это меняет язык скрипта)

Сначала я бы посмотрел на последний вариант (IronPython) ... похоже, для этой работы.

0 голосов
/ 06 октября 2009

Вы можете попробовать языки сценариев, такие как Lua или boo . Я не реализовал их, но видел, как подобные вещи работают в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...