Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

84
Vistas
Azure App Service parece tener NLS habilitado en modo .NET 5

Después de pasar innumerables horas para llegar al núcleo de un error, finalmente reduje un problema al uso de string. StringComparison.InvariantCultureIgnoreCase string.Compare .NET 5.

Considere los siguientes dos dotnetfiddles:

  • .NET 4.7.2: https://dotnetfiddle.net/KdErSK
  • .NET 5: https://dotnetfiddle.net/ZWfprp

Cuando ejecuta .NET 4.7.2 obtiene -1 como resultado, cuando ejecuta .NET 5 obtiene 1 como resultado.

Después de navegar un poco, esto llevó al siguiente aviso:

  • https://docs.microsoft.com/en-us/dotnet/standard/base-types/string-comparison-net-5-plus
  • https://docs.microsoft.com/en-us/dotnet/core/extensions/globalization-icu

Entonces, siguiendo esto, un resultado de -1 es la versión NLS, mientras que el resultado de .NET 5 de 1 es la versión ICU.

Sin embargo, cuando abro un Azure App Service en modo .NET 5, el resultado del código anterior en una página de Razor es -1, también conocido como: la versión NLS.

Esto puede causar todo tipo de problemas extraños, porque dos sistemas diferentes conducen a resultados inesperados.

Cuando agrego lo siguiente a mi archivo de proyecto, como se mencionó en el último artículo, mi entorno local también genera un -1.

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

No importa qué tipo de configuración use en Azure, siempre seguirá generando -1.

Larga historia, algo está pasando en Azure. Según la documentación, mi versión de Windows es lo suficientemente nueva como para tener ICU habilitada. Parece que Azure App Service está usando un modo NLS forzado o está ejecutando alguna versión de ICU que mi máquina local no tiene.

¿Alguien sabe cómo puedo averiguar qué versión de ICU (si corresponde) está usando Azure, de modo que pueda usar la sugerencia de la documentación para usar AppLocalIcu? De lo contrario, si algo está claramente del lado de Azure, mi pregunta es cuál sería la mejor ubicación para informar esto.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Alguien en el equipo de Azure App Service se sumergió en esto:

  • La mayoría de Azure App Services se ejecutan en Windows 2016, más específicamente en el momento de escribir este artículo:
 Major Minor Build Revision ----- ----- ----- -------- 10 0 14393 0
  • En el panorama de Windows Server, la ICU se introdujo en Windows Server 2019.

Entonces, para responder a mi propia pregunta: Azure App Services de hecho usa NLS de forma predeterminada. ¡Esto no es un error!

Al incluir lo siguiente en su archivo de proyecto, ICU se verá obligado a:

 <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>

Esto está en línea con la solución que mencionó @Crazy Crab, ¡gracias!

Consulte también https://www.nuget.org/packages/Microsoft.ICU.ICU4C.Runtime para obtener la versión más reciente (68.2.0.9 en el momento de escribir este artículo).

Voy a aceptar mi propia respuesta, ya que siento que da una mejor respuesta a la pregunta "¿Por qué sucede esto?", en lugar de simplemente solucionarlo.

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que puede usar este método para habilitar la ICU local de la aplicación en el servicio de aplicaciones de Azure.

Si su aplicación web es una aplicación que depende del marco, puede consumir ICU a través de un paquete NuGet.

  • Instale el paquete NuGet Microsoft.ICU.ICU4C.Runtime en su proyecto de aplicación web .
  • Edite el archivo del proyecto para agregar <RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="<suffix>:<version> or <version>" /> en la sección <ItemGroup> . O puede agregar una configuración de aplicación DOTNET_SYSTEM_GLOBALIZATION_APPLOCALICU con el valor <suffix>:<version> o <version> .

Luego, puede usar la versión especial de ICU en Azure App Service como desee.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda