为所有项目类型注册扩展提供程序

5

我有一个Visual Studio扩展,可以在项目项的属性网格中添加一个属性。它是通过注册一个扩展提供程序来完成的:

    void RegisterExtenderProvider()
    {
        var provider = new PropertyExtenderProvider(_dte, this);
        string name = PropertyExtenderProvider.ExtenderName;
        RegisterExtenderProvider(VSConstants.CATID.CSharpFileProperties_string, name, provider);
        RegisterExtenderProvider(VSConstants.CATID.VBFileProperties_string, name, provider);
    }

    void RegisterExtenderProvider(string extenderCatId, string name, IExtenderProvider extenderProvider)
    {
        int cookie = _dte.ObjectExtenders.RegisterExtenderProvider(extenderCatId, name, extenderProvider);
        _registerExtenderProviders.Add(cookie, extenderProvider);
    }

这对于C#和VB项目来说很好用,但仅限于这两种类型的项目...

  • 是否有可能使其适用于所有项目类型?
  • 如果不行,我该在哪里找到其他项目类型的CATID?
1个回答

2
注册扩展提供程序适用于所有项目类型是没有意义的。
  • 项目类型可能有也可能没有由MSBuild支持。
  • 项目类型可能有或没有项目文件(Web站点项目没有项目文件)。
  • 项目类型可能有或没有生成可执行输出。有许多不同的项目类型,例如 *.wixproj*.ucproj*.javaproj*.shfbproj 等等。
相反,您需要为您知道它支持的项目系统注册您的扩展提供程序。

感谢您的回答。理想情况下,我希望支持任何具有MSBuild兼容项目文件的项目类型,但如果不可能,我将接受一组封闭的项目类型。问题是我找不到已知项目CATID列表的任何地方。您有任何想法在哪里可以找到吗? - Thomas Levesque
谢谢,但项目类型GUID与CATID不同...实际上,我知道我必须在C#和VB项目中使用哪些CATID,但我无法在注册表中找到它们,所以它们必须在其他地方定义。 - Thomas Levesque
@ThomasLevesque 您是正确的。对此感到抱歉!CATID只在代码中真正存在,例如此示例 - Sam Harwell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接