c#加载动态生成的部分类程序集

本文关键字:分类 程序集 加载 动态 | 更新日期: 2023-09-27 18:02:39

我想动态地重写一个虚拟基类函数,并在应用程序中使用这个被重写的方法。如果我写一个基本的示例类:

partial Class myBase
{
   public myBase() {}
   public virtual void DoStuff()
   {
      throw new Exception("this function is not overriden");
   }
}
partial Class myDeriv : myBase
{
   public myDeriv() {}
}

现在我想重写myDeriv。在飞行中做事情。所以我创建了一个字符串代码块并使用

进行编译

CSharpCodeProvider。CompileAssemblyFromSource

方法。在将此dll写入磁盘后,我尝试使用

加载它。
Assembly.LoadFrom("onTheFly.dll");

但是应用程序无法找到这个被覆盖的函数。如果你有其他更好的解决方案,我也愿意接受。我只需要在飞行中重写函数。

谢谢大家!

c#加载动态生成的部分类程序集

我认为这似乎不可能是由这里或这里描述的相同规则引起的

引自原文:

"你不能有两个局部类在两个中引用同一个类不同的组件(项目)。程序集编译完成后元数据被嵌入,您的类不再是局部的。部分Classes允许您将同一个类的定义拆分为两个文件。"

"不能使用partial关键字来分割类的代码项目之间。partial关键字是编译器的一个技巧;的编译器将从它找到的部分中输出一个类,所以类的所有部分必须存在于相同的二进制文件中。一旦类被编译后,就不会留下它是分部类的痕迹。

如果你想扩展一个现有的类,你要么需要继承它(如果它不是密封的),或者创建您自己的新类包含希望从中组合信息的类。"