【发布时间】:2013-05-28 08:43:15
【问题描述】:
我正在尝试在运行时生成代码,该代码使用来自另一个命名空间的自定义类。
这是我的代码:
namespace Test.Programm.Network
{
class Handler
{
public void CreateAssembly()
{
string[] code =
{
@"using System;
using System.Collections;
namespace Test.Programm.Network
{
class HandleMessage
{
protected static internal Queue _queue;
public static void Received(string message)
{
lock (_queue)
{
_queue.Enqueue(message);
}
}
public HandleMessage()
{
_queue = new Queue();
}
}
}"
};
CompilerParameters parms = new CompilerParameters();
parms.GenerateExecutable = false;
parms.GenerateInMemory = true;
CodeDomProvider compiler = null;
compiler = CodeDomProvider.CreateProvider("CSharp");
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(parms, code);
var cls = compilerResults.CompiledAssembly.GetType("Test.Programm.Network.HandleMessage");
Assembly assembly = compilerResults.CompiledAssembly;
var newHandler = assembly.CreateInstance(compilerResults.CompiledAssembly.GetType("Test.Programm.Network.HandleMessage").ToString());
}
}
}
但我不想将字符串传递给我的函数,我想将自己的类型传递给该函数。
现在我有一个像这样的简单消息类:
namespace Test.Programm.Messages
{
public class Message<T>
{
string _message;
}
}
如果我也想在要生成的代码中添加 using Test.Programm.Messages,我会收到此命名空间不存在的错误,缺少参考...
我尝试添加 parms.ReferencedAssemblies.Add("Grid.Node.Messages");到代码生成,但这不起作用。搜索网络,所以还没有给出答案-.-
感谢您的帮助。
【问题讨论】:
标签: c# runtime .net-assembly