Dav*_*all 6 c# mef mpf visual-studio vs-extensibility
我正在考虑为visual sudio 2010添加一种新的编程语言,我对最佳方法感到困惑.
我查看了MPF并找到了一些关于如何进行语法高亮,链接外部解析器等的示例,这看起来非常简单.
然后我读到了一些名为MEF的东西以及它如何成为visual studio的新扩展性模型.我已经玩过它了,我的语法突出显示了一些样本的工作.现在,对于MEF,我迷失了如何在我的解析器中链接我的语言,就像使用ParseSOurce的MPF一样,等等.我正在使用ANTLR btw.
MEF仅用于编辑器的视觉方面,如突出显示,装饰等......还是可以/建议用它来实现语言服务?
从我收集的内容来看,MEF是一种新的推荐方法,但创建一种新语言似乎比使用常规MPF更难.强积金仍然是一个好方法吗?
MEF(托管扩展框架)是.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困难得多,并且需要更大的脑损伤,但是我在MEF方面的了解还远远没有在MPF方面。
我自己有点困惑,因为MSDN混合了我注意到的MEF和MPF文章。您需要非常仔细地观察MSDN的哪个子节,您很容易偶然从MEF类别切换到MPF。但是,MSDN会在一些有关扩展VS的常规文章中向您暗示“是什么”,例如:http : //msdn.microsoft.com/zh-cn/library/cc138569.aspx
| 归档时间: |
|
| 查看次数: |
1260 次 |
| 最近记录: |