c# - 可以使用C# codeDOM回调预编译函数吗?

标签 c# codedom

我正在开发一款愚蠢的游戏,玩家通过编程遵循的程序来控制他们的角色。我使用 C# codeDOM 来编译播放器编写的代码,并且我希望播放器能够调用写入软件预编译部分的函数。例如:

玩家编写的代码在运行时由 codeDOM 编译:

namespace AutoCrawl
{
    public class Player
    {
        public void Go_Up()
        {
            Move("Up");
        }
    }
}    

我的预编译代码:

    private void compileUserCode()
    {
        string code = UserCodeTextBox.Text;

        CSharpCodeProvider provider = new CSharpCodeProvider();
        CompilerParameters parameters = new CompilerParameters();

        parameters.GenerateInMemory = true;
        parameters.GenerateExecutable = false;

        CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
    }

    private void Move(string direction)
    {
        //move the player's character in the direction specified by "direction"
    }

问题是我不知道如何告诉 codeDOM 编译器它可以在我自己的预编译代码中找到函数 'Move'。我从 codeDOM 编译器收到以下错误:

Error (CS0103): The name 'Move' does not exist in the current context

这可能吗?我似乎找不到其他人以这种方式使用 codeDOM 的任何示例。

感谢您的帮助!

最佳答案

执行此操作的最佳方法是将 CompilerParameters 上的 ReferencedAssemblies 属性设置为包含附加代码的库。

var parameters = CompilerParameters
{
    ReferencedAssemblies = {
    "my.dll",
    // etc
    }
};

这是一篇关于该主题的较长博客文章,包括 github 链接 http://danielslaterblog.blogspot.co.uk/2015/05/programming-programming-computer-game.html

关于c# - 可以使用C# codeDOM回调预编译函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299902/

相关文章:

c# - 在c#中反序列化部分json字符串(数组)

c# - 列表的多态性

c# - 理解delegate在C#中的具体用法

c# - 如何从 mvc 5 中的 Controller 更改布局(母版页)?

c# - 尝试将标准输入传递给主要方法以在线评估代码

vb.net - 删除从 Codedom 生成的代码中的项目

c# - 如何忽略 ASP.NET MVC 路由中的特定路由

c# - 我们真的需要对 DLL 进行硬编码吗

c# - 高性能的属性访问和可能的动态编译

c# - 如何将另一个项目(程序集)从我的解决方案添加到 CompilerParameters.ReferencedAssemblies 集?