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,我不知道为什么。我不知道如何克服这个错误。有人有什么建议吗?
即使您在内存中生成它,它仍然会将.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);