You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps Server扩展调试:更新后新文件未生效求助

Azure DevOps扩展更新后新增文件未生效的解决方法

问题详情

我为Azure DevOps云版及Server版开发一款用于添加流水线任务的扩展,测试时修复问题后重装新版本,发现新增文件未生效。已尝试编译Tasks并重新安装,问题仍存在。

扩展结构:
扩展结构

扩展清单(vss-extension.json):

{
    "manifestVersion": 1,
    "id": "dev",
    "name": "test",
    "version": "8.0",
    "publisher": "coder",
    "targets": [
        {
            "id": "Microsoft.VisualStudio.Services"
        }
    ],
    "description": "Manage your day-to-day work items, sprints, and releases in test",
    "categories": [
        "Azure Pipelines"
    ],

    "icons": {
        "default": "static/icon.png"
    },
    "content": {
        "details": {
            "path": "overview.md"
        }
    },

    "files": [
        {
            "path": "Tasks/AddFeedStatusV1"
        },
        {
            "path": "static",
            "addressable": true
        }
    ],
    "contributions": [
        {
            "id": "service-endpoint",
            "description": "Service endpoint type for devuser connections",
            "type": "ms.vss-endpoint.service-endpoint-type",
            "targets": [
                "ms.vss-endpoint.endpoint-types"
            ],
            "properties": {
                "name": "devuser",
                "displayName": "devuser server connection",
                "url": {
                    "displayName": "Server Url",
                    "helpText": "Url for the devuser server to connect to."
                },
                "inputDescriptors": [
                    {
                        "id": "integ_scope_id",
                        "name": "integ_scope_id",
                        "description": "",
                        "inputMode": "textbox",
                        "isConfidential": false,
                        "validation": {
                            "isRequired": true,
                            "dataType": "string",
                            "maxLength": 300
                        }
                    },
                    {
                        "id": "conenction_function_uuid",
                        "name": "conenction_function_uuid",
                        "description": "",
                        "inputMode": "textbox",
                        "isConfidential": false,
                        "validation": {
                            "isRequired": true,
                            "dataType": "string",
                            "maxLength": 300
                        }
                    },
                    {
                        "id": "conenction_function_version",
                        "name": "conenction_function_version",
                        "description": "",
                        "inputMode": "textbox",
                        "isConfidential": false,
                        "validation": {
                            "isRequired": true,
                            "dataType": "string",
                            "maxLength": 300
                        }
                    },
                    {
                        "id": "app_install_id",
                        "name": "app_install_id",
                        "description": "",
                        "inputMode": "textbox",
                        "isConfidential": false,
                        "validation": {
                            "isRequired": true,
                            "dataType": "string",
                            "maxLength": 300
                        }
                    },
                    {
                        "id": "extension_id",
                        "name": "extension_id",
                        "description": "",
                        "inputMode": "textbox",
                        "isConfidential": false,
                        "validation": {
                            "isRequired": true,
                            "dataType": "string",
                            "maxLength": 300
                        }
                    }
                ],
                "authenticationSchemes": [
                    {
                        "type": "ms.vss-endpoint.endpoint-auth-scheme-token"
                    }
                ],
                "dataSources": [],
                "helpMarkDown": "<a href=\"url-to-documentation\" target=\"_blank\"><b>Learn More</b></a>"
            }
        },
        {
            "id": "zs-addfeedstatus-task",
            "type": "ms.vss-distributed-task.task",
            "targets": [
                "ms.vss-distributed-task.tasks"
            ],
            "properties": {
                "name": "Tasks/AddFeedStatusV1"
            }
        }
    ]
}

排查与解决步骤

1. 确认版本号更新

要确保每次更新都递增扩展清单中的version字段,Azure DevOps依赖版本号判断是否替换旧扩展,当前已更新为8.0,若此前版本低于该值则没问题。

2. 检查文件打包情况

  • 若新增文件属于Tasks/AddFeedStatusV1目录,当前清单已包含该路径;若为新增独立目录或文件,需手动添加到files数组。
  • 执行tfx extension create打包时,查看控制台输出确认新增文件被纳入.vsix包;也可解压.vsix文件,验证内部是否存在新增文件。

3. 清除缓存

  • 云版:浏览器强制刷新(Ctrl+F5)或切换无痕模式测试,触发缓存刷新。
  • Server版:重启Azure DevOps Server相关服务,或清除服务器缓存目录(参考路径:C:\Program Files\Azure DevOps Server 2022\Application Tier\Web Services\_tfs_data\Cache,依实际版本调整)。

4. 彻底清理旧扩展

在Azure DevOps组织/服务器的“扩展管理”中彻底卸载旧版本,等待数分钟后再安装新版本。Server版需额外检查数据库是否残留旧扩展记录,操作前务必备份数据库。

5. 验证任务配置

确认contributions中流水线任务的路径配置正确(当前"name": "Tasks/AddFeedStatusV1"无误),同时检查该目录下的task.json是否正确引用新增文件(如脚本、依赖库等)。

6. 核对编译输出

确认编译Tasks时,新增文件已正确生成到Tasks/AddFeedStatusV1目录,无遗漏或编译错误;手动对比本地开发文件与打包后目录的文件列表,确保一致。


内容的提问来源于stack exchange,提问作者Selva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:27:06