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

时间:2015-05-18 09:46:18

标签: 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编译器得到以下错误:

  

错误(CS0103):当前上下文中不存在名称“移动”

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

最好的方法是将CompilerParameters上的ReferencedAssemblies属性设置为包含附加代码的lib。

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

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