如何将C#库添加到Monaco编辑器(代码补全)并限制可能的库?

9

如何将自定义的C#程序集添加到Monaco编辑器中,以便编辑器可以识别和完成程序集类型?

还有,我该如何选择和限制Monaco编辑器可以使用的.net库?

先行致谢。


你好,你解决了这个问题吗?我目前也在解决同样的问题。 - Krahu
1个回答

8
没有简单的方法。 .Net 是一个框架,不能轻易地用 JS 进行分析,特别是如果你需要读取所有二进制依赖项(dlls)中的各种类型。因此,你还需要一些后端引擎(可能是 WebApi)。在 Monaco 中加载项目时,可以要求后端从二进制依赖项(参见反射)中读取所有导出的类型并将它们发送到前端。
如果你希望这些内容实时更改(例如有人创建了一个新类),那么你可能会遇到更加复杂的情况,需要同时保持 Monaco 编辑器中的代码和后端项目的同步(参见 Roslyn)。
如果你只需要支持读取 + 类型,可以采取以下方案:
  1. 使用 https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-completion-provider-example 注册完成提供程序。
  2. 还要在后端加载项目,并使用 C# 读取所有引用。
  3. 在 provideCompletionItems 中,获取插入符位置。
  4. 将文件和坐标发送到后端。
  5. 后端读取该位置处的符号,推断其类型(可能使用 Roslyn)。
  6. 跟踪并反映使用反射的类型。
  7. 将此类型的成员发送回。
如果你的 Monaco 编辑器不是只读的,那么你还需要同步后端和前端,以使位置始终匹配。

那不正确,你可以在浏览器中运行C# - 不需要后端。 - Shadow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接