Я пытаюсь создать код во время выполнения, который использует пользовательский класс из другого пространства имен.Добавить пользовательский класс во время выполнения, ссылка отсутствует
Here's мой код:
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;
}
}
если я хочу тоже добавить с помощью Test.Programm.Messages в коде я хочу, чтобы генерировать, получать ошибки i'm, что это пространство имен Безразлично Нет, отсутствует ссылка ...
Я попытался добавить parms.ReferencedAssemblies.Add («Grid.Node.Messages»); к генерации кода, но это не работает. поиск в Интернете и SO еще не получил ответа. -0-
Спасибо за помощь.
god damm ^^ пробовал все, но не простейшую душу. thx bro – gangfish