在相同的assembly空间中动态生成模块

考虑我有一个程序在运行,它应该执行以下操作 – 应该从文本文件中读取一些代码,并且应该在它自己的Assembly空间中执行它,以便正在执行的新代码可以访问已经运行的代码的所有组件。 怎么可能? 请帮忙。

通过汇编空间,你的意思是AppDomain?

你可能想看看IronPython 。 作为脚本语言,它更适合在运行时动态添加到程序中。

除此以外:

您可以通过System.dll中的Microsoft.CSharp.CSharpCodeProvider访问C#(和VB.NET)编译器。

您可以使用它将该文本文件编译为单独的dll(可能在内存中)。 确保在编译时添加当前正在执行的程序集作为参考。 然后你也可以

  • 将程序集加载到当前正在执行的AppDomain中。 这样,它就可以访问应用程序中的所有对象。 但是, 您无法再次卸载代码。 你必须卸载整个AppDomain(即你的应用程序)
  • 将程序集加载到单独的AppDomain中。 您必须通过远程处理(或其他进程中的通信方法)显式提供对某些对象的访问,但是如果文本文件发生更改,您可以卸载/替换代码。

无论哪种方式,您都必须使用reflection来调用动态加载的代码。

不知道魔法是如何工作的,但是我会看看MyGeneration ,它是开源的并且可以实现你想做的事情。 它可以读取C#,VB.Net和JScript文件,然后构建/编译这些脚本,并允许它们访问它自己的类和程序集。