gpt4 book ai didi

c# - Azure 应用服务似乎在 .NET 5 模式下启用了 NLS

转载 作者:行者123 更新时间:2023-12-04 11:43:29 24 4
gpt4 key购买 nike

在花费了无数个小时来了解错误的核心之后,我最终将问题归结为在 . NET 5。

考虑以下两个 dotnetfiddles:

运行 .NET 4.7.2 时,结果为 -1;运行 .NET 5 时,结果为 1。

经过一番浏览后,出现以下通知:

因此,-1 的结果是 NLS 版本,而 .NET 5 结果 1 是 ICU 版本。

但是,当我在 .NET 5 模式下启动 Azure 应用服务时,上述代码在 Razor 页面中的结果是 -1,又名:NLS 版本。

这可能会导致各种奇怪的问题,因为两个不同的系统会导致意外的结果。

当我将以下内容添加到我的项目文件中时,如上一篇文章中所述,我的本地环境也会输出 -1。

<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>

无论我在Azure中使用哪种配置,它都会一直输出-1。

说来话长,Azure 上出了点问题。根据文档,我的 Windows 版本足够新,可以启用 ICU。看起来 Azure 应用服务要么使用强制 NLS 模式,要么正在运行我的本地计算机没有的某些 ICU 版本。

有人知道我如何找出 Azure 正在使用哪个 ICU 版本(如果有),以便我可以使用文档中的建议来使用 AppLocalIcu?否则,如果某些东西明显位于 Azure 一侧,那么我的问题是报告此情况的最佳位置是什么?

最佳答案

Azure 应用服务团队的某人深入研究了这个问题:

  • 大多数 Azure 应用服务都在 Windows 2016 上运行,更具体地说,在撰写本文时:
Major  Minor  Build  Revision
----- ----- ----- --------
10 0 14393 0
  • 在 Windows Server 环境中,ICU 是在 Windows Server 2019 中引入的。

所以回答我自己的问题:Azure 应用服务确实默认使用 NLS。这不是一个错误!

通过在项目文件中包含以下内容,将强制使用 ICU:

<ItemGroup Condition="'$(OS)' == 'Windows_NT'">
<PackageReference Include="Microsoft.ICU.ICU4C.Runtime" Version="68.2.0.9" />
<RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="68.2" />
</ItemGroup>

这与@Crazy Crab提到的解决方案一致,谢谢!

另请参阅https://www.nuget.org/packages/Microsoft.ICU.ICU4C.Runtime最新版本(撰写本文时为 68.2.0.9)。

我将接受我自己的答案,因为我觉得它为“为什么会发生这种情况”问题提供了更好的答案,而不仅仅是修复它。

关于c# - Azure 应用服务似乎在 .NET 5 模式下启用了 NLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69005962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com