如何将自定义 C# 程序集添加到 Monaco 编辑器,以便编辑器识别/完成我的程序集类型?
我如何选择和限制摩纳哥编辑器可以使用的 .net 库?
提前谢谢。
没有简单的方法。 .Net是一个无法用JS轻松分析的框架,特别是如果您需要读取二进制依赖项(dlls(中的所有类型。
因此,您还需要某种后端引擎(可能是WebApi(。 在 Monaco 中加载项目可能会要求后端从二进制引用中读取所有导出的类型(请参阅反射(并将它们发送到前端。
如果你希望这些事情实时改变(例如,有人创建了一个新类(,你可能会遇到更复杂的场景,你需要同时保持两者 - Monaco 编辑器中的代码和后端中的项目不断同步(参见 Roslyn(。
如果只需要支持 read + 类型,可以执行以下操作:
- 使用 https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-completion-provider-example 注册完成提供程序。
- 还可以在后端加载项目并使用 C# 读取所有引用。
- 在提供完成项中 - 您将获得插入符号位置
- 将文件和坐标发送到后端。
- 后端读取该位置的符号,推断其类型(可能使用 Roslyn(
- 使用反射向下跟踪和反映类型。
- 发回此类型的成员。
如果您的Monaco编辑器不是只读的 - 您还需要同步后端和前端,因此位置始终匹配。