自定义发布 def context 命令在 Azure DevOps 2019 中中断

Custom release def context command broke in Azure DevOps 2019

我有一个 TFS 扩展,其中包含一些用于发布定义的上下文命令。清单中的贡献记录为:

    {
        "id": "foo",
        "type": "ms.vss-web.action",
        "description": "...",
        "targets": ["ms.vss-releaseManagement-web.release-definition-explorer-context-menu"],
        "properties":
        {
            "title": "Foo",
            "text": "Foo",
            "icon": "images/foo-16.png",
            "group": "actions",
            "uri": "web/main.html"
        }
    },

执行命令的main.html:

function OnFoo(SrcCtxt)
{
    //...
}

VSS.init({ usePlatformScripts: true });
VSS.register("foo", {execute: OnFoo});

它在 TFS 2015..2018 中工作,在 2019 年崩溃。Foo 命令可以在菜单中看到,当您单击它时,main.html 加载(您可以通过开发工具看到),但未调用 OnFoo 函数。

控制台显示如下:

No handler found on any channel for message: {"id":1,"methodName":"","instanceId":"MyPublisher.myext.foo","instanceContext":{"definition":{"id":1,"name":"Sample release definition","path":"\"}},"params":null}

VSS.SDK.js的版本是最新的,刚刚重新下载。

编辑:我的工作理论是我没有正确注册命令。从历史上看,有两种注册方式——通过对象和通过函数。用后者替换了我的代码,在控制台中得到了另一条消息:

Uncaught (in promise) The registered object MyPublisher.myext.foo could not be found.

在查看样本时,我在贡献属性下发现了额外的一行 - registeredObjectId。一旦我将它添加到我的清单中,这些命令就会像以前一样工作。 属性 的值必须与 VSS.register() 的第一个参数匹配,其中贡献 ID 曾经是。

不酷,微软。 不酷。


编辑:扩展中的其他内容也损坏了。一方面,JQuery 的 $ 对象似乎不再可用。不再适合 Whosebug 格式,it's a blog post now.