在花了无数个小时来了解错误的核心后,我最终将问题归结为在 .NET 5 中使用string.Comparewith的问题StringComparison.InvariantCultureIgnoreCase。
考虑以下两个 dotnetfiddle:
运行 .NET 4.7.2 时,结果为 -1,运行 .NET 5 时,结果为 1。
经过一番浏览,这导致了以下通知:
所以,按照这个,-1 的结果是 NLS 版本,而 1 的 .NET 5 结果是 ICU 版本。
但是,当我在 .NET 5 模式下启动 Azure 应用服务时,上述代码在 Razor 页面中的结果是 -1,也就是:NLS 版本。
这可能会导致各种奇怪的问题,因为两个不同的系统会导致意想不到的结果。
当我将以下内容添加到我的项目文件中时,如上一篇文章所述,我的本地环境也输出 -1。
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
无论我在 Azure 中使用什么样的配置,它都会一直输出 -1。
说来话长,Azure 出了点问题。根据文档,我的 Windows 版本足够新,可以启用 ICU。看起来 Azure 应用服务要么使用强制 NLS 模式,要么正在运行我的本地机器没有的某些 ICU 版本。
任何人都知道我如何确定 Azure 正在使用哪个 …