如何在 C# 中实现对 codedom 的引用程序集

How to impelement referenced assemblies to codedom in C#

我想使用CodeDom技术。但是,我找不到将引用的程序集实现到我的动态代码的正确方法。如果我只写简单的声明代码(e.x return "test"),一切都可以。但是当我想使用 MessabeBox 时编译结果错误包含 The name 'MessageBox' does not exist in the current context

 StringBuilder sbCode = new StringBuilder();

 sbCode.Append("public class Test {");
 sbCode.Append(tbCode.Text);
 sbCode.Append("}");
var cp = new CompilerParameters()
{
   GenerateInMemory = true,
   GenerateExecutable = false,
   ReferencedAssemblies =
    {
     "System.dll",
      "System.Core.dll",
      "System.Windows.dll",
      "System.Windows.Forms.dll"
    }
  };

  using (CSharpCodeProvider codeProvider = new CSharpCodeProvider())
   {
     CompilerResults res = codeProvider.CompileAssemblyFromSource(cp, sbCode.ToString());
     var type = res.CompiledAssembly.GetType("Test"); 
     var obj = Activator.CreateInstance(type);
     var output = type.GetMethod("Execute").Invoke(obj, new object[] { });
   }

这是我在 tbCode 文本框中编写的示例代码:

public string Execute()
{
 MessageBox.Show("adsf");
return "asdf";
}

您应该在 class 声明的开头添加所需的 "using" 语句:

using System.Windows.Forms;

您还可以使用完整命名空间调用消息框:

public string Execute()
{
 System.Windows.Forms.MessageBox.Show("adsf");
return "asdf";
}