【问题标题】:Dynamically Compile Methods in a Class Library动态编译类库中的方法
【发布时间】:2012-10-29 12:01:35
【问题描述】:

假设你有This,它被编译成一个dll:

namespace HelloWorld
{
   public class Hello
   {
        public void WriteHello()
        {
             Console.Writeline("Hello World");
        }

        **public void WriteHello2()
        {
             Console.Writeline("Hello World2");
        }**
   }
}

我希望 WriteHello2 方法实际上位于文本文件中,并在此程序中从那里编译。

原因

我想创建一个用户创建方法的界面。然后我会把这个方法写到一个文本文件中,这样每当程序运行时,它就会读入文本文件,并执行那段代码。

示例

假设我的 dll 仅包含 1 个方法,即 WriteHello。 用户运行程序,然后创建一个新方法,比如 WriteHello2(他无法创建任何仅限于我的应用程序的方法)。现在 dll 应该包含 2 个方法。

我不确定这是否可行。

【问题讨论】:

标签: c# .net vb.net


【解决方案1】:

要从字符串编译代码,您可以使用CompileAssemblyFromSource 方法。如果您希望保留更改,即让程序自行修改其二进制文件,事情会变得更加复杂。我不确定这是否是您想要的,但通过一些巧妙的临时文件处理和流程协调是可行的。

【讨论】:

  • 我试过了,但是我已经把整个程序放到了文本文件中,我不确定是否使用 CompileAssemblyFromSource 将点点滴滴放到文本文件中。
  • 您确实需要提供整个 dll 的源代码(您不能将代码添加到 dll,只能重新创建整个)。在您的特定源示例中,您可以将 Hello 类设为部分,并拥有一个单独的“模板”文件,其中包含命名空间和类声明,您可以在其中粘贴用户提供的字符串和方法。跨度>
  • 我想这似乎是唯一的方法......谢谢,我会这样做。
猜你喜欢
  • 2011-08-06
  • 2011-11-10
  • 2018-06-04
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多