4

我想在 Visual Studio 中开发对特定语言的支持。MPF 语言服务和 MEF 编辑器扩展似乎有很多重叠,我无法明确回答我应该使用哪一个。

我只对在 Visual Studio 2012 及更高版本中开发这种语言支持感兴趣。我正在使用 C# 并希望仅使用托管 API。

MSDN 文档指出语法高亮应该使用语言服务来完成。但是当你去那里的文档时,有一个注释可以说是建议使用 MEF。但是,当您阅读 MEF 文档时,它并没有真正说明它旨在处理全文件语法突出显示。措辞让我觉得它是用于穿插突出装饰的。

然而,与此相反,Ok!sample 演示了我认为是完整文件语法突出显示的内容,尽管使用这种规模的示例,它是否真的建议应该以这种方式使用它并不是很清楚。

MPF 语言服务似乎支持向“另存为”对话框添加过滤器。对于仅通过 MEF 支持的语言,我还没有看到类似的东西,但我可能错过了它。我没有发现任何迹象表明它们中的任何一个都支持向“打开”对话框添加文件类型过滤器。这向我表明,MEF 编辑器扩展并非旨在实现全面的语言扩展,而是旨在扩展现有语言扩展。

请问有什么想法吗?

编辑:

我希望你能直接回答的一些问题:

  1. 用于突出显示的 MEF 编辑器扩展点是用于完整文件语法突出显示实现,还是仅用于散布装饰?

  2. 如果我为 MEF 导出注册了 FileType 和 ContentType,需要哪些额外步骤(或者甚至可能?)以使相关文件过滤器显示在各种文件对话框中?

  3. MEF 编辑器扩展点是否旨在替换并可能最终弃用 MPF 语言服务?

4

1 回答 1

2

对于全功能支持,您将无法只使用一件事。但是,您最终得到的可能是实现 MEF 接口和实现 Visual Studio 的一些核心 COM 接口的组合。您根本不需要使用 MPF 语言服务包。

我认为您的问题比您预期的要广泛,这使我很难写出完整的答案。

编辑:对于新问题。

  1. 您可以使用 的实现来IClassifier实现全文件语法高亮。我所有较新的基于 Visual Studio 的 IDE 都专门使用它。

  2. 您需要导出一个ContentTypeDefinition,但不一定是文件类型。我刚刚发布了一篇博客文章,描述了我注册文件类型和扩展名所采取的步骤:

    Visual Studio 2012 中的文件类型和扩展名

  3. 也许?更重要的是,有些事情它更擅长,而其他事情它现在根本无法做到,因此您可以选择平衡以获得最佳的整体生产力。

于 2013-04-18T18:46:40.110 回答