【发布时间】:2013-12-01 21:26:38
【问题描述】:
我需要在当前上下文中通过 CSharpCodeProvider 编译和执行代码,例如:
using System;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
namespace ConsoleApplication1
{
public class Program
{
public static void WriteMessage(string message)
{
Console.WriteLine(message);
}
static void Main(string[] args)
{
var compiler = new CSharpCodeProvider();
var parms = new CompilerParameters
{
GenerateExecutable = false,
GenerateInMemory = true,
};
parms.ReferencedAssemblies.Add("System.dll");
var results = compiler.CompileAssemblyFromSource(parms, new string[]
{@" using System;
class MyClass
{
public void Message(string message)
{
Program.WriteMessage(message);//Console.Write(message);
}
}"});
if (results.Errors.Count == 0)
{
var myClass = results.CompiledAssembly.CreateInstance("MyClass");
myClass.GetType().
GetMethod("Message").
Invoke(myClass, new[] {"Hello World!"});
}
else
{
foreach (var error in results.Errors)
{
Console.WriteLine(error);
}
}
Console.Read();
}
}
}
你怎么看,我尝试从编译的代码中调用Program.WriteMessage,但我只得到错误。为什么?
【问题讨论】:
-
什么错误?发布错误!我也没有看到对 program.write 消息的引用
-
顺便说一下,.NET 世界中的“上下文”被称为你的AppDomain。
标签: c#