2011-05-13 145 views
0

我想在我的遊戲中實現C#作爲腳本語言。運行時編譯C#

我的問題是,如果我想使用在遊戲核心(exe)中定義的類,我的腳本將無法編譯。

腳本是這樣的:

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. 
} 
} 

該腳本的MDX樣品中編譯,如:

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 2011-05-13 17:47:50

+0

哦,我很笨...檢查編譯器錯誤[0],現在它的工作原理,謝謝 – Blaxx 2011-05-13 18:00:57

+0

'ConsoleApplication2.exe'中定義了'ConsoleApplication1.GameObject'嗎? – 2011-05-13 18:01:07

回答

2

這是一個日常編程問題。它不工作,你認爲它應該工作。所以把它分解下來。與其解決一個大問題,不如解決一個小問題。試着編譯你的程序以外的腳本。一旦你得到了這個工作,那麼你可以嘗試從你的程序內部將它編譯爲一個腳本,知道你已經解決了引用和編譯器問題的基本問題。

喜歡的東西:

CSC /reference:ConsoleApplication1.exe script.cs

從外觀上來看,它可能是因爲改變從ConsoleApplication2.exeConsoleApplication1.exe參考那樣簡單。