2011-05-13 3 views
0

내 게임에서 스크립팅 언어로 C#을 구현하고 싶습니다.런타임에서 C# 컴파일

제 문제는 게임 코어 (exe)에 정의 된 클래스를 사용하려는 경우 스크립트가 컴파일되지 않는다는 것입니다.

스크립트가 MDX 샘플에서와 같이 컴파일
using System; 
using ConsoleApplication1; 

class Script 
{ 
private static void Call() 
{ 
    Console.WriteLine("called"); 
} 

public static void Init() 
{ 
    Console.WriteLine("Script"); 
    Call(); 
    GameObject myO; // THIS IS WHAT I WANT TO GET WORKED, 
//IF THIS IS COMMENTED OUT, IT COMPILES FINE, GAMEOBJECT 
// IS DEFINED IN THE "ConsoleApplication1" NAMESPACE. 
} 
} 

:

static void Main(string[] args) 
    { 
     CodeDomProvider provider = new CSharpCodeProvider(); 
     CompilerParameters cp = new CompilerParameters(); 
     //cp.CompilerOptions = "/target:library"; 
     cp.GenerateExecutable = false; 
     cp.GenerateInMemory = true; 
     cp.IncludeDebugInformation = false; 
     cp.ReferencedAssemblies.Add("ConsoleApplication2.exe"); 
     cp.ReferencedAssemblies.Add("System.dll"); 
     CompilerResults cr = provider.CompileAssemblyFromFile(cp, "script.cs"); 
     if (!cr.Errors.HasErrors) 
     { 
      Console.WriteLine("Success"); 
      cr.CompiledAssembly.GetType("Script").GetMethod("Init").Invoke(null, null); 
     } 
     Console.ReadLine(); 
    } 

있습니까 함수를 호출 또는 "의 ConsoleApplication1"에 정의 된 개체를 만들 수있는 방법을

스크립트는 다음과 같습니다 스크립트를 통한 네임 스페이스?

+2

컴파일 타임 오류가 발생하는 부분을 놓쳤습니까? – Tipx

+0

오, 너무 바보 같아요 ... 컴파일러 오류 [0]을 확인한 후 감사합니다. – Blaxx

+0

'ConsoleApplication1.GameObject'가 'ConsoleApplication2.exe'에 정의되어 있습니까? –

답변

2

이것은 일일 프로그래밍 문제입니다. 작동하지 않고 작동해야한다고 생각합니다. 그러니 부셔 라. 큰 문제를 해결하는 대신 작은 문제를 해결하십시오. 프로그램 외부의 외부에서 스크립트를 컴파일하려고합니다. 그런 일을하게되면, 프로그램 내부에서 스크립트로 컴파일하려고 시도 할 수 있습니다. 참조 및 컴파일러 문제를 정리 한 기본적인 문제가 있음을 알고 있습니다. 같은

뭔가 :

CSC /reference:ConsoleApplication1.exe script.cs 그것의 모습에서

, 그것은 ConsoleApplication2.exe에서 ConsoleApplication1.exe에 대한 참조를 변경하는 것처럼 간단 할 수 있습니다.