无法将已知文件扩展名链接到自定义编辑器分类器



我正在为经典的Visual Basic源文件(模块和类文件)开发编辑器分类器扩展。该项目是使用Visual Studio 2012 SDK中的编辑器分类器项目模板创建的。向导创建了三个代码文件:一个用于分类器,一个用于分类格式和提供者,另一个包含分类定义。为了将*.bas*.cls文件链接到我的自定义分类器,我对上一个进行了以下更改。。。

using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Text.Classification;
using Microsoft.VisualStudio.Utilities;
internal static class MyEditorClassifierClassificationDefinition
{
    [Export(typeof(ClassificationTypeDefinition))]
    [Name("MyEditorClassifier")]
    internal static ClassificationTypeDefinition MyEditorClassifierType = null;
    [Export]
    [Name("custom")]
    [BaseDefinition("code")]
    internal static ContentTypeDefinition MyContentDefinition = null;
    [Export]
    [FileExtension(".bas")]
    [ContentType("custom")]
    internal static FileExtensionToContentTypeDefinition MyModuleFileExtensionDefinition = null;
    [Export]
    [FileExtension(".cls")]
    [ContentType("custom")]
    internal static FileExtensionToContentTypeDefinition MyClassFileExtensionDefinition = null;
}

问题是,Visual Studio不会为具有*.bas*.cls扩展名的文件调用我的分类器,而是使用了Visual Basic的内置编辑器。我已经使用自定义文件扩展名测试了我的编辑器分类器;在这种情况下,分类器按预期工作。我想知道,是否可以更改已知文件扩展名的分类器。

我发现了一个有趣的解决方案,用于对已经由语言服务分类的关键字进行分类。它的描述说它使用了一个标签来增强代码高亮显示。也许它可以帮助你:KeywordClassifier链接项目的旧版本使用了描述中提到的分类器。

您可以使用ITextDocumentFactoryService获得加载文档的名称,以及扩展名,或者有一种方法可以将标记符绑定到扩展名,而不仅仅是Basic(而不是code)的内容类型。FileExtensionAttribute可能会有所帮助。

最新更新