Visual Studio 扩展中的自定义 ColorableItems

Custom ColorableItems in Visual Studio Extension

我正在为 Visual Studio 开发语言服务,在 Visual Studio 2013 年遇到自定义颜色问题。我最近从 Visual Studio 2010 年搬到了 2013 年,现在每当我设置RequestStockColorsfalse,我失去了所有语法突出显示。

我的语言服务实现了 GetColorableItemGetItemCount。我正在使用 9 种自定义颜色。当我调试我的语言服务时,我注意到 GetColorableItem 被调用了几次,但 GetItemCount 从未被调用。

当我通过 Visual Studio 进行调试时,我使用了以下命令行参数:

/ranu /rootsuffix Exp

更新: 我更改了前 5 种颜色的名称(与标准标记颜色重叠的颜色)以匹配标准名称(例如 "Keyword", "Identifier", 等等)并且这些颜色现在显示了,但是 none 我的额外颜色类型出现了。此外,我从未在 Visual Studio 的字体和颜色配置中看到它们中的任何一个。如何将它们安装在那里?

事实证明,我需要为我的每种自定义颜色创建一个 ClassificationFormatDefinition 实例,并将它们导出为 EditorFormatDefinition 类型。一旦我这样做了,它们就会出现在“字体和颜色”页面中,还会出现在语法突出显示中。

对于超出默认6种的每种颜色,我都添加了一个class定义如下:

[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = "<name of color>")]
[Name("<name of color>")]
[UserVisible(true)]
[Order(Before = Priority.Default)]
internal sealed class ExampleColor: ClassificationFormatDefinition
{
    public ExampleColor()
    {
        this.DisplayName = "<name of color>";
        this.ForegroundColor = System.Windows.Media.Color.FromArgb(0, 0, 128, 128);
    }
}

但是,我的 GetItemCount() 方法仍然没有命中。

我最近 运行 遇到了一个类似的问题,我的自定义 ColorableItems 没有显示在我的语法突出显示中。我可以通过清除字体和颜色缓存来解决这个问题。

我暂时在我的 vs 包的 Initialize 方法中包含以下内容:

IVsFontAndColorCacheManager mgr = this.GetService(typeof(SVsFontAndColorCacheManager)) as IVsFontAndColorCacheManager;
mgr.ClearAllCaches();

这为我解决了问题。此修复不应要求包括 6 个默认值或要求任何其他 ClassificationFormatDefinition 类.

注意:值得一提的是,我也从未见过调用 GetItemCount(),但清除缓存解决了主要问题。

致谢:还有一些功劳归功于 Ed Dore 在此线程 http://www.databaseforum.info/8/1217583.aspx 上的评论,它帮助我找到了解决方法。