Aparece un mensaje de error si ejecuta una aplicación o intenta el acceso a un sitio web en un equipo con una determinada actualización de software de .NET Framework 2.0: "Nombre de referencia cultural 'Referencia cultural' no compatible"


Síntomas


En un equipo que tenga instalado Microsoft Windows Server 2003, instala la actualización de software de Microsoft .NET Framework 2.0 que se describe en el artículo siguiente de Microsoft Knowledge Base:
928365 Descripción de la actualización de seguridad para .NET Framework 2.0 para Windows Server 2003, Windows XP y Windows 2000: 10 de julio de 2007

Cuando ejecuta una aplicación o intenta tener acceso al sitio web del equipo, puede recibir el mensaje de error siguiente:
[System.ArgumentException] : Culture name 'Culture' is not supported for the following 13 cultures: az-AZ-Latn uz-UZ-Latn en-CB az-AZ-Cyrl uz-UZ-Cyrl del sr-sp-Latn sr-sp-Cyrl Cyrl de BA de bs sr-BA-Cyrl del sr-BA-Latn Latn de CA de iu div-MV del Latn de BA de bs
Además, si una aplicación tiene recursos que utilizan el formato de nombre de referencia cultural antiguo, y si el nombre de la referencia cultural del usuario utiliza el nuevo formato de nombre de referencia cultural, la aplicación no puede buscar los recursos para el formato de nombre de referencia cultural antiguo.

Causa


La actualización de software que se menciona en la sección "Síntomas" es una actualización acumulativa para .NET Framework 2.0. Esta actualización incluye cambios en los nombres de referencias culturales. Los nuevos nombres siguen la sintaxis de los estándar IETF (RFC 4646 y RFC 4647). Los cambios en los nombres culturales mejoran la interoperabilidad al garantizar que cada configuración regional tenga un identificador coherente.

Las asignaciones de los nombres de la referencia cultural anteriores a los nuevos nombres de la referencia cultural se hacen del siguiente modo:
Nombre de la referencia cultural anteriorNombre de la referencia cultural nueva
az-AZ-Latn az-Latn-AZ
uz-UZ-Latn uz-Latn-UZ
sr-SP-Latn sr-Latn-CS
az-AZ-Cyrl az-Cyrl-AZ
uz-UZ-Cyrl uz-Cyrl-UZ
sr-SP-Cyrl sr-Cyrl-CS
bs-BA-Cyrl bs-Cyrl-BA
sr-BA-Latn sr-Latn-BA
sr-BA-Cyrl sr-Cyrl-BA
bs-BA-Latn bs-Latn-BA
iu-CA-Latn iu-Latn-CA
div-MV dv-MV
en-CB en-029

Solución


Para evitar este problema, genere las referencias culturales personalizadas de las nuevas configuraciones regionales que utilizan los nombres de las referencias culturales anteriores. Para ello, siga estos pasos.

Nota: debe tener .NET Framework 2.0 instalado para utilizar el programa de muestra que se proporciona aquí.
  1. Cree una aplicación que se puede utilizar para generar una referencia cultural personalizada. Para ello, siga estos pasos:
    1. Haga clic en Inicio, haga clic en
      Ejecutar, escriba notepad y, a continuación, haga clic en Aceptar.
    2. Pegue el código siguiente en el Bloc de notas.
      using System;
      using System.Globalization;

      public class MakeCultures
      {
      static void Main()
      {
      CreateCopyCulture("en-029", "en-CB");
      CreateCopyCulture("az-Latn-AZ", "az-AZ-Latn");
      CreateCopyCulture("uz-Latn-UZ", "uz-UZ-Latn");
      CreateCopyCulture("sr-Latn-CS", "sr-SP-Latn");
      CreateCopyCulture("az-Cyrl-AZ", "az-AZ-Cyrl");
      CreateCopyCulture("uz-Cyrl-UZ", "uz-UZ-Cyrl");
      CreateCopyCulture("sr-Cyrl-CS", "sr-SP-Cyrl");
      CreateCopyCulture("bs-Cyrl-BA", "bs-BA-Cyrl");
      CreateCopyCulture("sr-Latn-BA", "sr-BA-Latn");
      CreateCopyCulture("sr-Cyrl-BA", "sr-BA-Cyrl");
      CreateCopyCulture("bs-Latn-BA", "bs-BA-Latn");
      CreateCopyCulture("iu-Latn-CA", "iu-CA-Latn");
      CreateCopyCulture("dv-MV", "div-MV");


      }

      static void CreateCopyCulture(string strRealName, string strAliasName)
      {
      try
      {
      // Create a new culture based on the old name
      CultureAndRegionInfoBuilder carib = new CultureAndRegionInfoBuilder(
      strAliasName, CultureAndRegionModifiers.None);

      carib.LoadDataFromCultureInfo(new CultureInfo(strRealName));
      carib.LoadDataFromRegionInfo(new RegionInfo(strRealName));

      carib.Register();

      // Change the existing culture's parent to the old culture
      carib = new CultureAndRegionInfoBuilder(strRealName,
      CultureAndRegionModifiers.Replacement);

      carib.Parent = new CultureInfo(strAliasName);
      carib.Register();

      // Verify they're registered...
      CultureInfo ci = new CultureInfo(strAliasName);
      Console.WriteLine("Aliased culture {0} has parent of {1}.", ci, ci.Parent);
      ci = new CultureInfo(strRealName);
      Console.WriteLine("\"Real\" culture {0} has parent of {1}.", ci, ci.Parent);
      }
      catch (Exception e)
      {
      Console.WriteLine("Unable to create custom culture " + strAliasName);
      Console.WriteLine(e);
      }
      }
      }
      Nota: este programa de muestra establece los elementos primarios de las nuevas referencias culturales en las referencias culturales anteriores. Los elementos primarios de las referencias culturales anteriores no pueden ser al mismo tiempo las nuevas referencias culturales, porque esta situación produciría la recursividad infinita durante la búsqueda de recurso.
    3. En el menú Archivo, haga clic en
      Guardar como.
    4. En el cuadro de diálogo Guardar como, haga clic en Mis documentos, escriba
      MakeCultures.cs en elcuadro Nombre de archivo, haga clic en Todos los archivos en el cuadro
      Guardar como tipo, y luego haga clic en
      Guardar.
    5. Cierre el Bloc de notas.
  2. Ejecute la aplicación que creó en el paso 1 para generar una referencia cultural personalizada. Para ello, siga estos pasos:
    1. Haga clic en Inicio y en
      Ejecutar, escriba cmd y haga clic en
      Aceptar.
    2. Escriba cd "Mis documentos" y, a continuación, presione Entrar.
    3. Escriba
      %windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.csy, a continuación, presione Entrar.
    4. Escriba MakeCultures.exe para ejecutar el programa que genera la referencia cultural.

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a".