【问题标题】:Enable a VSIX extension in a certain language?启用某种语言的 VSIX 扩展?
【发布时间】:2017-09-08 00:37:41
【问题描述】:

有没有一种方法可以检测当前的编程语言并禁用基于该语言的扩展?

我正在创建一个仅在 C++ 版本中兼容的 VSIX 包。我可以以编程方式检测当前的编程语言并响应不支持的语言而不打开我的对话框,但我觉得应该有一个属性或其他东西可以启用/禁用某种语言的扩展。

【问题讨论】:

    标签: visual-studio vsix vsixmanifest


    【解决方案1】:

    您可以为 C++ 创建自定义 UI 上下文规则并使用它来加载您的包。对于 C# 和 VB,它看起来像这样:

    [ProvideAutoLoad(UIContexts.LoadContext)]
    [ProvideUIContextRule(UIContexts.LoadContext,
        "RightFileTypeOpen",
        "(CSharpFileOpen | VBFileOpen)",
        new[] { "CSharpFileOpen", "VBFileOpen" },
        new[] { "ActiveEditorContentType:CSharp", "ActiveEditorContentType:Basic" })]
    

    有关详细信息,请参阅 MSDN 上的 How to: Use Rule-based UI Context for Visual Studio Extensions 和 Mads Kristensen 的 sample

    【讨论】:

    • 对于我的 VSIX 包,当用户打开扩展名为“.cs”的现有文件时,上述方法有效。相反,当用户创建一个新的文本文件(文件/新建/文本文件)并使用另存为将文件扩展名从“.txt”更改为“.cs”时,Visual Studio 不会实例化我的包类并且不会t 调用我的 InitializeAsync 方法。如果用户随后打开另一个编辑器窗口,然后切换回包含新重命名的 .cs 文件的窗口,则 Visual Studio 将实例化我的 Package 类。您知道这个问题吗?您知道其他解决方案吗?
    • @Alessandro 看起来像一个 VS 错误。
    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 2019-03-26
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多