C# 获取Visual Studio扩展名以仅对特定文件类型进行操作

C# 获取Visual Studio扩展名以仅对特定文件类型进行操作,c#,visual-studio,mef,visual-studio-extensions,file-type,C#,Visual Studio,Mef,Visual Studio Extensions,File Type,我正在为VisualStudio创建一个非常简单的扩展。我试图使扩展仅在使用python文件类型时才处于活动状态。我发现并尝试将其应用于我的情况,但我认为我遗漏了一些东西。该扩展可以正确地处理python文件,但当我希望它忽略其他文件类型时,它也会保持活动状态 到目前为止,我按照演练完成了以下课程: static class FileAndContentTypeDefinitions { [Export] [Name("py")] [BaseDefinition("tex

我正在为VisualStudio创建一个非常简单的扩展。我试图使扩展仅在使用python文件类型时才处于活动状态。我发现并尝试将其应用于我的情况,但我认为我遗漏了一些东西。该扩展可以正确地处理python文件,但当我希望它忽略其他文件类型时,它也会保持活动状态

到目前为止,我按照演练完成了以下课程:

static class FileAndContentTypeDefinitions
{
    [Export]
    [Name("py")]
    [BaseDefinition("text")]
    internal static ContentTypeDefinition hidingContentTypeDefinition;

    [Export]
    [FileExtension(".py")]
    [ContentType("py")]
    internal static FileExtensionToContentTypeDefinition hiddenFileExtensionDefinition;

}
然后,在SourceProvider和HandlerProvider中,我有:

[Export]
[ContentType("py")]
这允许python文件类型工作,但在其他文件类型打开时不禁用扩展名。有没有办法做到这一点

编辑:我意识到这太模棱两可了。该扩展基于前一行出现的方法签名(如果适用)为python文档注释提供完成建议。这是在键入“”时触发的。我希望这只发生在python文件中

其他出口产品包括: 来自HandlerProvider

[Export]
[ContentType("py")]

[Export(typeof(IVsTextViewCreationListener))]
[Name("token completion handler")]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Editable)]
来自源提供程序

[Export]
[ContentType("py")]

[Export(typeof(ICompletionSourceProvider))]
[ContentType("text")]
[Name("token completion")]

我还要补充一点,我非常密切地关注MSDN演练,因为这是我第一次尝试创建扩展。但结果是,我没有信心能够解释代码的每一部分(翻译:我不知道它有多少功能)

您正在导出
[ContentType(“text”)]
[ContentType(“py”)]
的提供者和侦听器

不要那样做


另外,您的第二个
[Export]
属性将作为该类本身导出,这是无用的。

您正在为
[ContentType(“text”)]
[ContentType(“py”)]
导出提供者和侦听器

不要那样做


另外,您的第二个
[Export]
属性将作为该类本身导出,这是无用的。

您所说的“禁用扩展”是什么意思?你想阻止什么?啊,很好。因此,扩展为python文档注释提供了一个完成,在键入“”时触发。我希望这只发生在python文件中。请向我们展示您导出的服务。嗨@SLaks我刚刚更新了我的问题。希望有帮助!“禁用扩展”是什么意思?你想阻止什么?啊,很好。因此,扩展为python文档注释提供了一个完成,在键入“”时触发。我希望这只发生在python文件中。请向我们展示您导出的服务。嗨@SLaks我刚刚更新了我的问题。希望有帮助!你能把你的第二句话扩大一点吗?第二个出口是什么?你是说两者都有吗?我指的是没有指定VS导入接口的接口。尝试只声明[ContentType(“py”)]并删除额外的导出调用。现在键入“”时不会发生任何事情。其他地方可能还有其他问题,但目前我需要将它们添加回还原功能。@IanPanzica:显示您当前的导出。它们与我现在在问题中列出的相同。我尝试删除两个空的[Export]语句,并将ContentType设置为“py”(组合和每个都是独占的),但在所有情况下,完成建议都没有出现。所以现在,出口已经恢复到原来的水平。另一方面,我不明白将ContentType从“text”改为“py”会如何破坏它,因为“py”的basedefinition是“text”,您能在第二条语句上展开一点吗?第二个出口是什么?你是说两者都有吗?我指的是没有指定VS导入接口的接口。尝试只声明[ContentType(“py”)]并删除额外的导出调用。现在键入“”时不会发生任何事情。其他地方可能还有其他问题,但目前我需要将它们添加回还原功能。@IanPanzica:显示您当前的导出。它们与我现在在问题中列出的相同。我尝试删除两个空的[Export]语句,并将ContentType设置为“py”(组合和每个都是独占的),但在所有情况下,完成建议都没有出现。所以现在,出口已经恢复到原来的水平。另一方面,我不明白将ContentType从“text”改为“py”会如何破坏它,因为“py”的基本定义是“text”