【发布时间】:2016-01-12 07:49:54
【问题描述】:
我想使用 CodeDom 技术。但是,我找不到将引用的程序集引入我的动态代码的正确方法。如果我只写简单的声明代码(例如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";
}
【问题讨论】:
-
引用只是链接 dll。您是否尝试添加 using 语句?
标签: c# dll .net-assembly dllimport codedom