首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual Studio 2010 MEF与MPF?

Visual Studio 2010 MEF与MPF?
EN

Stack Overflow用户
提问于 2012-05-31 04:34:13
回答 3查看 1.3K关注 0票数 6

我正在考虑将一种新的编程语言添加到visual sudio 2010中,但我对采取的最佳方法有点困惑。

我研究了MPF,找到了一些关于如何进行语法突出显示、连接外部解析器等的示例,它看起来非常简单。

然后我读到了一些叫做MEF的东西,以及它是如何成为visual studio的新的可扩展性模型的。我已经尝试过了,我已经通过下面的一些例子让我的语法突出显示工作起来了。现在,在MEF中,我不知道如何在我的语言解析器中链接,就像使用ParseSOurce的MPF一样。

MEF仅仅用于编辑器的视觉方面,如突出显示、装饰等。或者是否可以/推荐使用它来实现语言服务?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-16 19:23:24

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

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

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

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

你也可以用MPF实现标记器等,但我试过了,发现它比MEF更不直观。如果你问我,这比MEF难得多,而且需要更多的脑损伤,但我还没有像MPF那样使用MEF。

这让我自己有点困惑,因为我注意到MSDN把MEF和MPF的文章混在一起了。你需要非常仔细地观察你在MSDN的哪个部分,你可以很容易地从MEF类别切换到MPF。然而,在一些关于扩展VS的一般文章中,MSDN会提示你什么是什么,例如这里:http://msdn.microsoft.com/en-us/library/cc138569.aspx

票数 5
EN

Stack Overflow用户

发布于 2014-06-17 05:44:34

我目前正在使用MEF (用VS2013)实现一个专门的语言服务。

除了语法高亮显示(你可以用ITagger<ClassificationTag>来实现)和一些其他内置的特定用途的接口(例如,用于选项页面和各种类型的智能感知),为了做像后台解析这样的事情,你通常会在文件打开时实现IVsTextViewCreationListener和东西;或者,你可以使用包的Initialize方法作为入口点在后台遍历你的项目层次结构。

智能感知等功能通常会要求您响应某个命令(或者监控击键以知道何时弹出完成列表框);您可以通过实现IOleCommandTarget和处理相关命令来处理此问题(当创建文本视图时,您可以通过在IVsTextView上调用AddCommandFilter来手动挂接命令处理程序)。

到目前为止,我还没有遇到任何我不能通过MEF完成的事情(除了根本不能完成的事情);我从来没有真正研究过MPF,因为我不需要它。

(请注意,在一天结束时,代码往往类似于MEF管道,VS接口和助手类,以及EnvDTE粘液。)

票数 1
EN

Stack Overflow用户

发布于 2014-06-17 07:20:40

对通过MEF公开的特征使用MEF。其他功能将根据具体情况进行处理(如果在实现特定功能时遇到问题,请提出特定问题)。我仍然使用MPF的唯一一件事是项目系统(MPF for project,或MPFProj)。要处理后台解析,我建议看一下我的BackgroundParser实现(麻省理工学院许可证)。它工作得很好,尽管回过头来看,我希望我对它使用了第三方编程语言,并让ReParseImpl返回一个Task,而不是同步执行。

显示BackgroundParser的介绍和使用以及一些必需的帮助器类的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10823851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档