比方说,在我的 .NET 类的构造函数中,我想编写代码来动态地向我的类添加方法。所以现在当我反射(reflection)我的类(class)时,我会看到这些方法,而当我第一次构建项目时,这些方法并不存在
我怎样才能做到这一点?
我一直在查找 CodeDom,但它有点令人困惑
最佳答案
一旦加载程序集,就无法更改它。您可以使用 Reflection.Emit 或 CodeDom 来动态编译一个新的程序集,一个与您的类一样的类 + 额外的方法,但它不会更改现有的(至少在运行时存在的)类。潜在地,您可以将您的类加载到一个单独的 AppDomain 中,创建一个新类,该类是它的“副本”和附加项,然后将该程序集加载到您的主 AppDomain 中(并卸载您加载原始类的那个)。您仍在创建一个新类,而不是添加到现有类,但效果是相似的。
但是,您可以使用代码注入(inject)在加载类之前插入代码。有一些适用于 .NET 的代码注入(inject)框架可以帮助解决这个问题……但这与您的具体问题不同。
关于c# - 如何在运行时向 DLL 添加代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/886143/