VS Code中ARM模板copy命令IntelliSense不工作问题咨询
VS Code ARM模板copy功能导致IntelliSense失效排查
核心原因
VS Code的ARM模板IntelliSense完全依赖模板头部声明的schema文件做结构校验,一旦copy相关写法不符合schema规范,校验流程会直接中断,所有代码补全、提示功能就会停止工作,和模板本身的存储账户资源配置无关,问题全部出在copy块的书写规范上。
常见配置疏漏
- 层级放置错误:把资源迭代用的
copy块嵌套到了资源的sku、tags、properties等子属性内部,或是放到了resources数组的外层,不在单个资源对象的顶层。 - 必填属性缺失:资源级的
copy块必须包含name、count两个必填属性,漏写任意一个、或是出现拼写错误(比如大小写错误、把count写成counts)都会触发schema校验失败。 - 迭代类型混淆:如果是做属性级迭代(比如批量配置存储账户的网络规则、批量添加标签),错把属性级
copy块放到了资源顶层;或是把资源迭代的copy块写到了属性内部,都会导致schema匹配失败。
正确的copy块写法参考
以下是批量创建存储账户时,可正常触发IntelliSense的标准写法,copy块与name、type等资源顶层属性同级:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageAccountCount": { "type": "int", "defaultValue": 2 } }, "functions": [], "variables": {}, "resources": [ { "copy": { "name": "storageLoop", "count": "[parameters('storageAccountCount')]" }, "name": "[concat('appstore2212', copyIndex())]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2021-04-01", "tags": { "displayName": "appstore" }, "location": "East US", "kind": "StorageV2", "sku": { "name": "Standard_LRS" } } ], "outputs": {} }
快速修复步骤
- 第一步:把你写的
copy块移动到单个存储账户资源对象的顶层,和name、type、apiVersion属性保持同级。 - 第二步:检查
copy块内是否包含拼写正确的name、count属性,count的值可以是固定整数,也可以是参数、变量表达式。 - 第三步:如果调整完结构IntelliSense仍未恢复,按
Ctrl+Shift+P调出命令面板,执行Reload Window重载窗口,排除ARM插件缓存异常的问题。
注意:不要修改模板头部的
$schema字段值,保持当前2019-04-01版本的schema地址即可,低版本schema对copy功能的支持存在差异,反而会加剧提示异常问题。
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

