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

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

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

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

提前致谢。

最佳答案

没有简单的方法。 .Net 是一个无法用 JS 轻松分析的框架,尤其是当您需要读取二进制依赖项 (dll) 中的所有类型时。
因此,您还需要某种后端引擎(可能是 WebApi )。
在摩纳哥加载项目可能会要求后端从二进制引用中读取所有导出的类型(参见 反射 )并将它们发送到前端。
如果您希望这些东西实时更改(例如,有人创建了一个新类),您可能会遇到更复杂的场景,您需要同时拥有这两者 - Monaco Editor 中的代码和后端中的项目不断同步(见罗斯林)。
如果您只需要支持 read + 类型,您可以执行以下操作:

  • 您使用 https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-completion-provider-example注册完成提供程序。
  • 您还可以在后端加载项目并使用 C# 读取所有引用。
  • 在 provideCompletionItems - 你得到插入位置
  • 您将文件和坐标发送到后端。
  • 后端读取该位置的符号,推断其类型(可能是 Roslyn)
  • 使用反射跟踪和反射类型。
  • 发回这种类型的成员。

  • 如果您的 Monaco 编辑器不是只读的 - 您还需要同步后端和前端,因此位置始终匹配。

    关于c# - 如何将 C# 库添加到 Monaco 编辑器(代码完成)并限制可能的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52911559/

    相关文章:

    monaco-editor - 如何在具有外部类型定义的摩纳哥使用 addExtraLib

    c# - List<T> 怎么没有实现 Add(object value)?

    c# - 如何使用 C# 清除 DataGridView 中的行?

    c# - 创建对象:时出现错误 "an explicit conversion exists (are you missing a cast )"

    ios - 助理编辑器(Xcode 7.3)总是在 Storyboard中显示界面文件,即使我手动选择也是如此

    asp.net - Visual Studio-为什么.ASPX文件要比.ASPX.CS文件花费更长的时间?

    c# - 当参数不同但可转换时如何转换泛型类型?

    ruby - 当前可用的编辑器是否支持 Ruby 的散列冒号?

    monaco-editor - Monaco Editor registerCompletionItemProvider 移除默认的局部变量完成

    angular - 如何在 Monaco Editor 中突出显示特定文本