1

我有一个 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调用该函数。

控制台显示以下内容:

在任何消息通道上找不到处理程序:{"id":1,"methodName":"","instanceId":"MyPublisher.myext.foo","instanceContext":{"definition":{"id":1 ,"name":"示例发布定义","path":"\"}},"params":null}

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

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

Uncaught (in promise) 找不到已注册的对象 MyPublisher.myext.foo。

4

1 回答 1

0

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

不酷,微软。不酷。


编辑:扩展中的其他东西也坏了。一方面,JQuery 的$对象似乎不再可用。不再适合 StackOverflow 格式,它现在是一篇博文。

于 2019-03-25T14:32:39.960 回答