gpt4 book ai didi

c# - 使用 C# 作为 C# 应用程序的脚本语言

转载 作者:太空狗 更新时间:2023-10-29 21:54:31 24 4
gpt4 key购买 nike

我开发了一个使用 c# 脚本文件进行某些配置和设置的应用程序。脚本文件包含各种用户生成的对象和这些对象的某些函数。目前,用户必须使用第三方编辑器生成一个 .cs 文件,并提供我的程序的路径才能使用它。这种方法的缺点是用户在编辑脚本文件时没有自动完成和智能感知支持的灵 active 。

我想将脚本编辑部分嵌入到我的应用程序中。我可以使用富文本编辑器来做到这一点。但是编写自动完成部分的代码是一个巨大的痛苦。有什么方法可以为用户提供一个程序内编辑器,它也可以自动完成....

在程序中动态编译脚本的代码。

public String Compile(String inputfilepath)
{

CompilerResults res = null;
CSharpCodeProvider provider = new CSharpCodeProvider();
String errors = "";

if (provider != null)
{
try
{
Assembly asb = Assembly.Load("BHEL.PUMPSDAS.Datatypes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=81d3de1e03a5907d");
CompilerParameters options = new CompilerParameters();
options.GenerateExecutable = false;
options.OutputAssembly = String.Format(outFileDir + oName);
options.GenerateInMemory = false;
options.TreatWarningsAsErrors = false;
options.ReferencedAssemblies.Add("System.dll");
options.ReferencedAssemblies.Add("System.Core.dll");
options.ReferencedAssemblies.Add("System.Xml.dll");
options.ReferencedAssemblies.Add("System.Xml.dll");
options.ReferencedAssemblies.Add(asb.Location);
res = provider.CompileAssemblyFromFile(options, inputfilepath);
errors = "";
if (res.Errors.HasErrors)
{
for (int i = 0; i < res.Errors.Count; i++)
{
errors += "\n " + i + ". " + res.Errors[i].ErrorText;
}
}
}

catch (Exception e)
{
throw (new Exception("Compilation Failed with Exception!\n" + e.Message +
"\n Compilation errors : \n" + errors + "\n"));
}

}
return errors;
}

最佳答案

特别是对于自动完成,您需要使用两个系统:解析器和反射。

从理论上讲,解析器是一个非常简单的概念,但我敢肯定,对于像 C# 这样具有大量语法糖和上下文相关关键字的语言来说,编写它并不容易。

由于 .NET 本质上是反射性的,并且提供了一个反射框架,所以这部分也不应该是非常痛苦的。反射允许您将包含已编译程序集的面向对象元素——以及程序集本身——作为对象进行操作。例如,方法可以是 Method 对象。您可以通过检查 Type 类的成员来了解这个系统,它们为反射提供了一个基本的起点。另一个有用的起点是 AssemblyMSDN和往常一样,有大量结构化格式的“官方”信息。

关于c# - 使用 C# 作为 C# 应用程序的脚本语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16116308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com