c#load on-the-fly生成的分部类程序集

时间:2011-07-18 10:13:30

标签: c# reflection .net-assembly on-the-fly

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

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

partial Class myDeriv : myBase
{
   public myDeriv() {}
}

现在我想动态覆盖myDeriv.DoStuff。 所以我创建了一个字符串代码块并使用

进行编译
  

CSharpCodeProvider.CompileAssemblyFromSource

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

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

但是应用程序无法找到这个被覆盖的函数。如果你有任何其他更好的解决方案我也向他们开放..我只需要动态覆盖函数..

谢谢大家!

1 个答案:

答案 0 :(得分:1)

我认为似乎不可能由与herehere

所述相同的规则引起

引用原文:

  

“你不能让两个部分类在两个中引用同一个类   不同的组件(项目)。编译完汇编后,即可   元数据被烘焙,您的类不再是部分的。局部   classes允许您将同一个类的定义拆分为两个   文件“。

  

“您不能使用partial关键字来拆分类的代码   项目之间。 partial关键字是编译技巧;该   编译器将从它找到的部分输出一个单独的类,所以   该类的所有部分必须存在相同的二进制文件。一旦   编译了类,没有任何痕迹,它是一个部分类。

     

如果您想扩展现有的课程,您需要   继承它(如果没有密封),或创建自己的新类   包含您希望组合信息的类。“