首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将C#脚本编程接口(csi.exe)与主机程序集成?

如何将C#脚本编程接口(csi.exe)与主机程序集成?
EN

Stack Overflow用户
提问于 2016-09-29 16:30:27
回答 2查看 800关注 0票数 1

为了简单起见,如果我有一个游戏引擎。使用C#编译。如何使用C# (或其他方法)调用csi.exe脚本。如何在另一个程序(如Lua )中使用C#脚本编程接口?

编辑:澄清。我不想从Lua调用C#的csi.exe。我想从编译后的程序调用csi.exe,无论是C# (编译的C#程序)、C++还是其他什么东西。我的意思不是像从Lua调用脚本API。我的意思是像其他程序一样使用Lua。这就是我想使用C#脚本API的方式。我最感兴趣的是如何从编译的C#程序中调用C#脚本。

EN

回答 2

Stack Overflow用户

发布于 2016-09-30 15:53:17

您不必使用csi.exe,您实际上可以在应用程序中编译和执行C# (包含解决方案对象、类和方法的上下文)。

除了一些博客帖子之外,我还没有找到关于它的一些真正的文档。

您应该查看的主要方法是Microsoft.CodeAnalysis.CSharp.ScriptingMicrosoft.CodeAnalysis.Scripting

纵观CSharpScript.RunAsyncCSharpScript.EvaluteAsync,这两个脚本将编译和执行一个给定的C#脚本,其语法类似于csi.exe语法。

例如,如果希望用户输入一些代码,并期望该代码在向MyClass程序集公开用户时返回一些字符串:

代码语言:javascript
复制
private async void CompileAndExecuteLine(string userCode)
    {
        string output = "";
        ScriptOptions scriptOptions = ScriptOptions.Default.WithReferences(typeof(MyClass).Assembly);

        try
        {
            output = await CSharpScript.EvaluateAsync<string>(userCode, scriptOptions);
        }
        catch (CompilationErrorException cee)
        {
            string message = "You got errors:" + "\r\n";
            foreach (Diagnostic dia in cee.Diagnostics)
            {
                message += dia.ToString() + "\r\n";
            }
            MessageBox.Show(message, "Compilation Error");
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }

        return output;
    }

在本例中,您输入的代码必须返回一个字符串(需要以return someString;结尾),您可以从引用的程序集中调用任何类和方法,甚至可以在userCode中声明您自己的类(但没有名称空间)。

如果您希望有一些终端环境(=总是返回一些字符串),请考虑在执行之前操纵用户定义的代码。

票数 1
EN

Stack Overflow用户

发布于 2016-09-29 16:47:48

要从lua调用csi.exe,您可以使用

代码语言:javascript
复制
os.execute("c:\\<csi.exe location>\csi.exe myscript.csx")

如果您需要传递输入参数,那么

代码语言:javascript
复制
os.execute("c:\\<csi.exe location>\csi.exe myscript.csx myArg")

在您的myscript.csx文件中,您可以通过

代码语言:javascript
复制
Args[0] ... Args[n]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39775568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档