.NET 8 Web API部署Azure时SQL连接触发CultureNotFoundException
解决.NET 8 Azure Web API全球化不变模式导致的SQL连接错误
问题原因
Azure Web Apps的.NET 8环境默认启用了全球化不变模式,项目里的<InvariantGlobalization>false</InvariantGlobalization>设置可能被部署流程或Azure默认配置覆盖,导致最终的runtimeconfig.json中System.Globalization.Invariant仍为true,进而引发SQL连接时的文化信息加载错误。
解决步骤
1. 配置runtimeconfig.template.json
在项目根目录创建或修改runtimeconfig.template.json文件,写入以下内容:
{ "configProperties": { "System.Globalization.Invariant": false } }
编译时该文件的配置会合并到最终生成的runtimeconfig.json中,确保部署后参数生效。
2. 通过Azure应用服务配置强制关闭不变模式
登录Azure门户,找到目标Web API资源:
- 进入配置 > 应用程序设置
- 添加新的应用设置:键为
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT,值设为false - 保存配置并重启Web App
3. 检查Visual Studio发布配置
如果使用Visual Studio发布项目:
- 右键项目选择发布,点击编辑发布配置文件
- 切换到设置标签,确认未勾选任何与“全球化不变模式”相关的选项
- 重新发布项目
4. 验证部署结果
部署完成后,通过Azure的Kudu调试控制台(在Web App的高级工具中可进入),查看site/wwwroot目录下的应用程序runtimeconfig.json文件,确认System.Globalization.Invariant已设置为false。
补充说明
.NET 8对比.NET 6,在容器化、云托管等环境中默认启用了全球化不变模式,这是出现版本差异的核心原因。通过上述方法强制关闭该模式后,SQL连接就能正常加载en-us文化信息,解决连接错误。
内容的提问来源于stack exchange,提问作者Rob C
相关产品推荐
相关产品推荐

