2013-05-28 6 views
0

다른 네임 스페이스의 사용자 정의 클래스를 사용하는 런타임에 코드를 생성하려고합니다.런타임에 사용자 정의 클래스 추가, 참조 없음

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를 추가하려면이 네임 스페이스 아무튼 그 존재하지 않아 참조가 누락되었습니다 ...

parms.ReferencedAssemblies.Add ("Grid.Node.Messages"); 코드 생성,하지만이 나던 작동하지 않습니다. 웹 검색은 아직 답변이 없습니다.-

도움 주셔서 감사합니다.

답변

0

네임 스페이스 대신 어셈블리를 참조해야합니다. 이런 식으로 뭔가 : path_to.dll 유형 Message<T>이 들어있는 어셈블리 파일의 경로입니다

parms.ReferencedAssemblies.Add("path_to.dll"); 

.

+0

신 damm ^^ 모든 것을 시도했지만 단순한 영혼은 아닙니다. 너의 형제 – gangfish

관련 문제