如何将C#库添加到Monaco Editor(代码完成)并限制可能的库?

时间:2018-10-21 01:58:22

标签: c# editor monaco-editor visual-studio-monaco

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

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

谢谢。

1 个答案:

答案 0 :(得分:2)

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

因此,您还需要某种后端引擎(可能是 WebApi )。 在摩纳哥加载项目可能会要求后端从二进制引用中读取所有导出的类型(请参见 Reflection ),并将其发送到前端。

如果您希望这些事情实时更改(例如,有人创建了一个新类),则可能会遇到更加复杂的场景,在这两种场景中,您将需要同时使用-摩纳哥编辑器中的代码和后端中的项目不断同步(请参阅Roslyn)。

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

  1. 您使用https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-completion-provider-example注册完成提供商。
  2. 您还可以在后端加载项目,并使用C#阅读所有引用。
  3. 在provideCompletionItems中,您将获得插入符号位置
  4. 您将文件和坐标发送到后端。
  5. 后端读取该位置处的符号,推断其类型(可能与罗斯林有关)
  6. 跟踪并使用反射来反映类型。
  7. 发回此类型的成员。

如果您的摩纳哥编辑器不是只读的-您还应该同步后端和前端,因此位置始终匹配。