获取自定义ContentType以在VSIX扩展中进行自动完成注册

时间:2019-02-02 18:15:21

标签: c# visual-studio intellisense vsix

我写了一个扩展,为VS隔离外壳提供IntelliSense自动完成功能。我遇到的问题是使此自动完成仅适用于特定文件类型的文件。我已经按照指南Franklin M. Liang's thesis进行了操作。

相关的课程文件:

using Microsoft.VisualStudio.Utilities;
using System.ComponentModel.Composition;

namespace VSIXProject1
{
    internal static class FileAndContentTypeDefinitions
    {

        [Export]
        [Name("assembly")]
        [BaseDefinition("text")]
        internal static ContentTypeDefinition hidingContentTypeDefinition;

        [Export]
        [FileExtension(".asm")]
        [ContentType("assembly")]
        internal static FileExtensionToContentTypeDefinition hiddenAVRASMFileExtensionDefinition;
    }
}

尽管如此,当我将[ContentType("assembly")]导出放在用于处理IntelliSense集成的ICompletionSourceProvider和IVsTextViewCreationListener上时,自动完成功能根本无法显示。但是,当我使用[ContentType("text")][ContentType("plaintext")]时,自动完成功能将分别显示在所有文件或.txt文件中。

这是我尝试制作的第一个VSIX插件,所以也许我错过了一些东西。目前,我不知所措。很多谷歌搜索并没有产生太多信息,而且我发现的代码资源似乎以与我尝试的方式相同的方式来实现此行为。

1 个答案:

答案 0 :(得分:0)

因此,经过几次失败的尝试和好运之后,我意识到了我的问题所在。我尝试为其编写扩展的特定隔离外壳(Atmel Studio),已经具有程序集文件的ContentType。我猜想当我添加自己的内容类型时,它会被外壳本身覆盖。

为了解决该问题,我使用了外壳使用的ContentType名称,该名称恰好是“汇编程序”。根据出现在“工具”>“选项”>“文本编辑器”下的语言,这是一个幸运的猜测。希望这可以帮助将来遇到相同问题的人。