我正在为经典的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可能会有所帮助。