c# – 在相同的程序集空间中动态生成模块

考虑我有一个程序在运行,应该执行以下操作 –

应该从文本文件中读取一些代码并在其自己的Assembly空间中执行它,以便正在执行的新代码可以访问已经运行的代码的所有组件.

怎么可能?请帮忙. 最佳答案 通过汇编空间,你的意思是AppDomain?

您可能希望查看IronPython.作为脚本语言,它更适合在运行时动态添加到程序中.

除此以外:

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

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

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

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

点赞