将Docker化.NET Core应用部署到Azure容器注册表时遇错误
排查VS2022发布.NET7 Docker应用到Azure容器注册表时的Microsoft.Win32.Registry加载失败问题
问题场景
基于Visual Studio 2022创建的.NET 7.0默认Docker化Web应用,本地运行正常,但创建Azure容器注册表发布配置文件后执行发布流程,出现以下错误:
error from sender: context canceled C:\FolderPath\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.17.0\build\Container.targets(219,5): Error MSB4018: The "ContainerBuildAndLaunch" task failed unexpectedly. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. File name: 'Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
已尝试操作:开启程序集绑定日志、显式添加Microsoft.Win32.Registry NuGet包、重装Win11/VS2022/Docker Desktop,问题仍存在;另一台安装Visual Studio专业版的电脑可正常部署。
排查方向
检查VS组件与版本差异
- 打开VS安装器,对比专业版机器的组件列表,确保「Azure开发」「容器开发工作负载」完整安装,无组件遗漏。
- 查看
microsoft.visualstudio.azure.containers.tools.targets版本,当前使用1.17.0,可尝试升级到最新版本,或回退至与专业版机器一致的版本。
程序集绑定与GAC检查
- 以管理员权限运行命令
gacutil /l Microsoft.Win32.Registry,检查全局程序集缓存(GAC)中是否存在5.0.0.0版本的该程序集。若缺失,可安装.NET 5.0 SDK(该程序集属于.NET 5.0 runtime),或从正常机器复制对应程序集到GAC。 - 在项目的
web.config或app.config中添加程序集绑定重定向配置,确保版本匹配:<dependentAssembly> <assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly>
- 以管理员权限运行命令
Docker与VS集成校验
- 重启Docker Desktop,尝试切换Windows/Linux容器后端(匹配项目使用的容器类型),确认VS能正常连接Docker服务。
- 清理项目缓存(删除bin/obj文件夹)和Docker本地缓存(删除无用镜像、容器),重启VS后重新尝试发布。
权限与环境变量检查
- 以管理员身份运行Visual Studio,再次执行发布操作,排除权限不足导致的文件访问问题。
- 检查系统环境变量
PATH,确保包含.NET 5.0 runtime相关路径,保证VS能正确定位到目标程序集。
内容的提问来源于stack exchange,提问作者Yan D
相关产品推荐
相关产品推荐

