繁体   English   中英

在运行时编译C#

[英]Compiling C# at Runtime

我想在我的游戏中实现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”命名空间中定义的对象?

这是一个日常的编程问题。 它不起作用,你认为它应该工作。 所以打破它。 而不是处理一个大问题,处理一个小问题。 只是尝试在程序之外编译脚本。 一旦你开始工作,那么你可以尝试从程序内部编译它作为脚本,知道你已经解决了引用和编译器问题的基本问题。

就像是:

csc /reference:ConsoleApplication1.exe script.cs

从外观上来看,它可能是因为改变从参考简单ConsoleApplication2.exeConsoleApplication1.exe

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM