XNA C# Scripting with CSharpCodeProvider

本文关键字:CSharpCodeProvider with Scripting XNA | 更新日期: 2023-09-27 18:01:34

我正在制作一款基于XNA的rpg风格的游戏,并且我正在执行一个脚本引擎。

我已经遵循了一些教程,试图得到这个工作。目前,我从XML文件中读取以下内容:

namespace MyGame
{
  public class EngagedCode : ScriptingInterface.IScriptType1
  {
    public string RunScript()
    {
      ChangeFrame( 2 );
    }
  }
}

在我成功地将其放入项目后,我尝试用以下代码编译它:

Microsoft.CSharp.CSharpCodeProvider csProvider = new Microsoft.CSharp.CSharpCodeProvider();
CompilerParameters options = new CompilerParameters();
options.GenerateExecutable = false; //DLL
options.GenerateInMemory = true;
options.IncludeDebugInformation = true;
options.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);
CompilerResults result = csProvider.CompileAssemblyFromSource(options, code);
然而,此时我总是得到以下错误:
'result.CompiledAssembly' threw an exception of type 'System.IO.FileNotFoundException'

似乎系统无法找到我编译的。dll,我不知道为什么。我不知道如何克服这个错误。有人有什么建议吗?

XNA C# Scripting with CSharpCodeProvider

即使您在内存中生成它,它仍然会将.dll写入磁盘,除非您有编译错误,然后您会得到这个无用的System.IO.FileNotFoundException。所以很可能会出现编译错误。

为了提取这些编译错误,您需要添加以下内容:

CompilerResults results = csProvider.CompileAssemblyFromSource(parameters, textBox1.Text);
if (results.Errors.Count > 0)
{
    foreach (CompilerError CompErr in results.Errors)
    {
        //Hooray a list of compile errors
    }
    else
    {
        //Successful Compile
    }
}

如果你想跳过这些。看看这个班。它允许你只使用方法体,但这对你来说可能还不够。此外,您还需要更改const CodeStart字符串中的名称空间。

以下行不需要:

options.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);
相关文章:
  • 没有找到相关文章