7

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

我该如何选择和限制 Monaco Editor 可以使用的 .net 库?

提前致谢。

4

1 回答 1

6

没有简单的方法。.Net 是一个无法用 JS 轻松分析的框架,尤其是当您需要读取二进制依赖项 (dll) 中的所有类型时。

所以你还需要某种后端引擎(可能是WebApi)。在摩纳哥加载项目可能会要求后端从二进制引用中读取所有导出的类型(请参阅反射)并将它们发送到前端。

如果您希望这些事情会实时更改(例如,有人创建了一个新类),您可能会遇到更复杂的场景,您需要同时拥有这两者 - Monaco Editor 中的代码和后端中的项目不断同步(见罗斯林)。

如果您只需要支持 read + 类型,您可以执行以下操作:

  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 编辑器不是只读的 - 您还需要同步后端和前端,因此位置始终匹配。

于 2020-07-12T03:01:48.080 回答