2011-05-13 148 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参考那样简单。