如何在 VS Code 中添加自定义“when 子句”?

Kar*_*thi 6 .net visual-studio-code vscode-extensions blazor .net-core-3.0

目前,我正在为 .NET Core 3.0 blazor Web 项目开发一个简单的插件。在这种情况下,如果 .net core 3.0 blazor 项目,我想启用该加载项,并且如果该项目不是 .net core 3.0 blazor 项目,则不会显示我的自定义加载项。

我在 google 上搜索了有关 vscode 加载项扩展的信息,并找到了 vscode 的默认 when 子句,例如“when”:“explorerResourceIsFolder”等。但我希望工作区标头中的加载项具有类似项目是否为 .net core 3.0 blazor 的条件。我不知道如何以及在哪里添加此逻辑。

在此输入图像描述

我需要为 When 子句添加我自己的条件以显示我的加载项。另外,如果项目有我的自定义程序集,我需要使用我自己的自定义 when 子句在资源管理器标题上下文菜单中显示另一个加载项。

您能建议我如何实现这一目标吗?

以下是我的编码部分:

包.Json

"commands": [
            {
                "command": "extension.openTemplatesFolder",
                "title": "Open Templates Folder",
                "category": "Project"
            },
            {
                "command": "extension.saveProjectAsTemplate",
                "title": "Save Project as Template",
                "category": "Project"
            },
            {
                "command": "extension.deleteTemplate",
                "title": "Delete Existing Template",
                "category": "Project"
            },
            {
                "command": "extension.createProjectFromTemplate",
                "title": "Create Project from Template",
                "category": "Project"
            }
        ],
        "menus": {
            "explorer/context": [
                {
                    "command": "extension.saveProjectAsTemplate",
                    "when": "myContext == success && explorerResourceIsRoot",
                    "group": "projectTemplates@1"
                }
            ]
        }
Run Code Online (Sandbox Code Playgroud)

扩展名.ts

const value = "success";
vscode.commands.executeCommand('setContext', 'myContext', `${value}`);



export function activate(context: vscode.ExtensionContext) {



    // create manager and initialize template folder
    let projectTemplatesPlugin = new ProjectTemplatesPlugin(context, vscode.workspace.getConfiguration('projectTemplates'));
    projectTemplatesPlugin.createTemplatesDirIfNotExists();

    // register commands



    // open templates folder
    let openTemplatesFolder = vscode.commands.registerCommand('extension.openTemplatesFolder', 
        OpenTemplatesFolderCommand.run.bind(undefined, projectTemplatesPlugin));
    context.subscriptions.push(openTemplatesFolder);

    // save as template
    let saveProjectAsTemplate = vscode.commands.registerCommand('extension.saveProjectAsTemplate', 
        SaveProjectAsTemplateCommand.run.bind(undefined, projectTemplatesPlugin));
    context.subscriptions.push(saveProjectAsTemplate);
}
Run Code Online (Sandbox Code Playgroud)

笔记:

vscode.commands.executeCommand('setContext', 'myContext', value);在显示加载项之前不会执行。点击插件后执行

Mat*_*ner 5

您可以使用setContext以下命令:

vscode.commands.executeCommand('setContext', 'myContext', `value`);
Run Code Online (Sandbox Code Playgroud)

myContext然后在您的子句中使用when

该命令目前没有详细记录,但这里有一个在 git 扩展中使用该命令的示例