Azure emulator 无法本地调试 x64 MVC-project
结论
问题出在运行 Azure emulator 的 Windows 账户权限或账户配置上。MVC 项目本身可以使用 x64 运行。
将日常开发账户恢复为本机管理员账户,并用该账户启动 Visual Studio 后,Azure emulator 可以正常加载,调试器也能顺利附加。在这个案例中,仅在权限提示框中输入另一个管理员账户的凭据无法解决问题。
原因分析
不调试时,emulator 能正常启动,网站也可以访问,说明项目部署和 x64 运行基本正常。进入调试后,Visual Studio 无法附加到 role instance,远程调试监视器随即关闭,因此故障发生在调试器附加阶段。
错误提示虽然提到了“第三方网络软件不兼容”,但现有信息无法确认这是实际原因。根据权限调整后的结果,调试进程可能使用了不同的账户上下文,也可能是原开发账户缺少 Azure emulator 所需的用户级配置。仅凭当前错误信息,无法确定具体缺少哪项配置。
解决步骤
- 使用有权管理本机账户的管理员登录 Windows 7。
- 打开“控制面板 > 用户账户 > 管理其他账户”。
- 选择日常使用的开发账户,将账户类型改为“管理员”。
- 重新登录该开发账户。
- 使用该账户启动 Visual Studio,需要时选择“以管理员身份运行”。
- 保持 Web Role 的目标平台为
AnyCPU或x64,重新生成项目并启动 Azure project 调试。
日常开发账户需要具备相应权限。如果只在权限提示框中输入另一个管理员账户的凭据,Visual Studio、Azure emulator 和调试组件可能会在不同的用户配置环境中运行。
平台配置示例
Azure compute emulator 已提示当前系统支持 AnyCPU 和 x64。调试器报错时,不应通过将 Web Role 改为 x86 来绕过问题。项目文件中的平台配置可以参考:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
</PropertyGroup>
如果项目依赖 64 位组件,也可以使用:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
</PropertyGroup>
建议优先通过 Visual Studio 的 Configuration Manager 修改平台,以免手工编辑项目文件时出现配置名称不一致的问题。
注意事项
x86 或许能解决 unit-tests 的独立调试问题,但不适用于该环境中的 Azure Web Role,否则会直接触发平台不兼容错误。
恢复管理员权限后可以正常调试,说明问题与账户权限或用户配置有关,但无法据此判断缺少的是某个特定注册表项、网络组件还是 Azure SDK 配置。如果公司安全策略不允许开发账户长期拥有管理员权限,应由系统管理员进一步比较两个账户的权限和用户级配置。不要直接关闭安全软件或修改用途不明的系统设置。
备注:内容仅供参考。
