删除重建同名Azure Function App后旧函数只读恢复问题(VS2017)
为什么删除Azure Function App后重建同名应用会恢复旧的只读函数?
这个问题其实是Azure Function App和关联存储账户的默认行为导致的常见现象,我来一步步拆解背后的原因:
1. 存储账户的遗留数据是核心原因
Azure Function App依赖Azure存储账户来存储三类关键内容:函数代码文件、绑定配置信息,以及触发器的运行状态(比如定时器函数的最后执行时间)。当你通过Azure门户删除Function App时,默认不会自动删除它关联的存储账户——除非你在删除弹窗里特意勾选了「删除关联的资源」选项。
这就意味着,存储账户里的site/wwwroot目录(专门存放函数代码的位置)会完整保留旧函数的所有文件,即使Function App本身已经被删除。
2. 同名应用创建时的资源复用逻辑
当你用Visual Studio 2017在同一资源组创建同名的Function App时,VS会默认尝试复用该资源组内已存在的关联资源,尤其是存储账户。如果之前的存储账户名称和App名称有默认关联(比如常见的命名方式:myfunctionappxxxxstorage),VS会自动将新App连接到这个存储账户。
一旦新App连接到旧的存储账户,它就会读取wwwroot目录里遗留的旧代码文件,这些旧函数自然就会被加载到新App中。
3. 只读状态的由来
这些旧函数显示为只读,主要有两个原因:
- 部署机制冲突:如果你通过VS发布新函数,VS通常会使用Zip部署或本地Git部署的方式,这些方式会将代码写入存储账户的特定部署上下文。而旧的遗留文件不属于当前部署的一部分,所以App会将它们标记为只读,避免误修改破坏部署的一致性。
- 权限限制:新创建的Function App的服务主体身份和旧App不同,对存储账户里的旧文件可能只有读取权限,没有写入权限,这也会导致这些函数呈现只读状态。
解决办法
如果不想遇到这种情况,可以试试这些操作:
- 删除Function App时,务必勾选「删除关联的资源」选项,或者手动登录存储账户删除
site/wwwroot目录; - 创建新App时,明确指定一个全新的存储账户,避免复用旧的存储资源;
- 重建后如果出现只读旧函数,可以手动删除存储账户里的旧文件,或者通过VS重新发布新代码覆盖。
内容的提问来源于stack exchange,提问作者Haris B.T




