0

我正在为经典的 Visual Basic 源文件(模块和类文件)开发一个编辑器分类器扩展。该项目是使用 Visual Studio 2012 SDK 中的编辑器分类器项目模板创建的。该向导创建了三个代码文件:一个用于分类器,一个用于分类器格式和 -provider,另一个用于包含分类定义。我对最后一个进行了以下更改,以便将文件链接*.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 的内置编辑器。我已经使用自定义文件扩展名测试了我的编辑器分类器;在这种情况下,分类器按预期工作。我想知道,是否可以更改已知文件扩展名的分类器。

4

1 回答 1

1

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

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

于 2014-01-21T15:07:35.063 回答