2009-03-05 3 views
4

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

+0

Прошу пояснить, что вы подразумеваете под «собственным пространством сборки», «все компоненты» и «код уже запущен» – abhilash

ответ

0

Не знаете, как работает магия, но я бы посмотрел на MyGeneration, который с открытым исходным кодом и принимает то, что вы хотите сделать. Он может читать файл C#, VB.Net и JScript, а затем создавать/компилировать эти сценарии и предоставляет им доступ к собственному набору классов и сборок.

2

Посредством монтажного пространства, вы имеете в виду AppDomain?

Возможно, вы захотите посмотреть IronPython. В качестве языка сценариев он лучше подходит для динамического добавления в программу во время выполнения.

В противном случае:

У вас есть доступ к C# компилятор (и VB.NET) через Microsoft.CSharp.CSharpCodeProvider сидит в System.dll.

Вы можете использовать его для компиляции этого текстового файла в отдельную dll (возможно, в памяти). Убедитесь, что вы добавляете свою исполняемую сборку в качестве ссылки во время компиляции. Тогда вы можете либо

  • загрузить сборку в текущий исполняемый AppDomain. Таким образом, он имеет доступ ко всем объектам вашего приложения. Вы, однако, не можете выгрузить код еще раз. Вам придется разгрузить весь AppDomain (т. Е. Ваше приложение)
  • загрузить сборку в отдельный AppDomain. Вы должны явно предоставить доступ к некоторым вашим объектам с помощью Remoting (или других методов обработки связи), но вы можете выгрузить/заменить код в случае изменения текстового файла.

В любом случае вам придется использовать отражение для вызова динамически загружаемого кода.

Смежные вопросы