gpt4 book ai didi

c# - Visual Studio 2010 MEF 与 MPF?

转载 作者:太空狗 更新时间:2023-10-29 21:29:07 24 4
gpt4 key购买 nike

我正在研究向 visual sudio 2010 添加一种新的编程语言,但我对采用的最佳方法有点困惑。

我查看了 MPF 并找到了一些关于如何进行语法高亮显示、链接外部解析器等的示例,这看起来非常简单。

然后我阅读了有关 MEF 的内容以及它如何成为 visual studio 的新可扩展性模型。我玩过它,并且通过遵循一些示例,我的语法突出显示工作正常。现在,对于 MEF,我不知道如何在我的解析器中链接我的语言,就像使用 ParseSOurce 的 MPF 等。顺便说一句,我正在使用 ANTLR。

MEF 仅用于编辑器的视觉方面,如突出显示、装饰等...还是可以/建议使用它来实现语言服务?

据我所知,MEF 是新的推荐方法,但创建新语言似乎比使用常规 MPF 更难。强积金仍然是一个好方法吗?

最佳答案

MEF(托管扩展框架) 是 .NET 中用于扩展程序(如 Visual Studio)的通用编程方法。 VS 包/扩展可以使用较新的 VS-MEF 类(契约(Contract))而不是 MPF 类。 MEF 被装饰有 [Export] 属性的类识别。一般来说,您继承了一个特定的类,例如可着色的项目,并将其导出到 Visual Studio,然后 Visual Studio 在您的 MEF 包中查找所有导出并导入它们。

MPF(托管包框架) 就像围绕非托管/ native VS 扩展模型的旧 COM 包装器的类系统。您通过获取服务和实现 MPF 类的方法以编程方式扩展 Visual Studio(MPF 类反过来实现 VS 的 COM 包装器的类 COM 接口(interface)。例如 LanguageService 实现 IVsLanguageInfo 和其他一些接口(interface),但它只是简单地“收集”那些接口(interface)的方法,然后您可以在 LanguageService 实现类中覆盖这些方法。

如果要实现完整的编程语言,就要结合MPF和MEF。您将 MEF 用于编辑器部分,如标记化(语法突出显示需要)、大纲、大括号匹配等,并将 MPF 用于其他 VS 内容,如新工具窗口、属性页等。

除了 MPF,您还可以使用旧的 COM 包装器,但是 MPF 类已经为您做了一些 COM 工作,如果您选择 COM 包装器,您将不得不处理这些工作。

您还可以使用 MPF 实现分词器等,但我尝试了一下,发现它比 MEF 更不直观。如果你问我,它比 MEF 更难,需要更多的脑损伤,但我对 MEF 的了解还没有达到 MPF 的程度。

我自己有点困惑,因为我注意到 MSDN 混淆了 MEF 和 MPF 的文章。您需要非常仔细地观察您进入的 MSDN 的哪个小节,您可以很容易地从 MEF 类别切换到 MPF。但是,MSDN 会在一些关于扩展 VS 的一般文章中提示您什么是什么,例如此处:http://msdn.microsoft.com/en-us/library/cc138569.aspx

关于c# - Visual Studio 2010 MEF 与 MPF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10823851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com