Komunikat o błędzie wyświetlany podczas uruchamiania aplikacji lub próby uzyskania dostępu do witryny sieci Web na komputerze, na którym zainstalowano określoną aktualizację oprogramowania .NET Framework 2.0: "Nazwa kultury 'Culture' nie jest obsługiwana"

Objawy

Na komputerze z zainstalowanym systemem Microsoft Windows Server 2003 należy zainstalować aktualizację oprogramowania Microsoft .NET Framework 2.0 opisaną w następującym artykule z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:

928365 Opis aktualizacji zabezpieczeń dla programu .NET Framework 2.0 dla systemów Windows Server 2003, Windows XP i Windows 2000: 10 lipca 2007

 Podczas uruchamiania aplikacji lub próby uzyskania dostępu do witryny sieci Web na komputerze może zostać wyświetlony następujący komunikat o błędzie:

Uwaga

[System.ArgumentException] : Nazwa kultury "Culture" nie jest obsługiwana dla następujących 13 kultur: en-CB az-AZ-Latn uz-UZ-Latn sr-SP-Latn az-AZ-Cyrl uz-UZ-Cyrl sr-SP-Cyrl bs-BA-Cyrl sr-BA-Latn sr-BA-Cyrl bs-BA-Latn iu-CA-Latn div-MV

Ponadto, jeśli aplikacja ma zasoby, które używają starego formatu nazwy kultury, a nazwa kultury użytkownika korzysta z nowego formatu nazwy kultury, aplikacja nie może znaleźć zasobów dla starego formatu nazwy kultury.

Przyczyna

Aktualizacja oprogramowania wymieniona w sekcji "Objawy" to zbiorcza aktualizacja programu .NET Framework 2.0. Ta aktualizacja obejmuje zmiany w nazwach kultur. Nowe nazwy kultur są zgodne ze składnią standardów IETF (RFC 4646 i RFC 4647). Zmiany nazw kultur poprawiają współdziałanie, zapewniając spójne identyfikatory dla poszczególnych ustawień regionalnych.

Mapowania starych nazw kultur na nowe nazwy kultur są następujące:

Stara nazwa kultury Nazwa nowej kultury
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

Obejście

Aby obejść ten problem, stwórz kultury niestandardowe z nowych ustawień regionalnych, w których są używane stare nazwy kultur. W tym celu wykonaj następujące czynności.

Uwaga: aby korzystać z przykładowego programu udostępnionego tutaj, musisz mieć zainstalowaną wersję .NET Framework 2.0.

  1. Utwórz aplikację, której można użyć do utworzenia kultury niestandardowej. W tym celu wykonaj następujące czynności:

    1. Kliknij przycisk Start, kliknij polecenie Uruchom, wpisz polecenie Notatnik, a następnie kliknij przycisk OK.

    2. Wklej poniższy kod do Notatnika.

      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);
              }
          }
      }
      
      

      Uwaga: Ten przykładowy program ustawia rodziców nowych kultur na stare kultury. Rodzicami starych kultur nie mogą być jednocześnie nowe kultury, ponieważ taka sytuacja spowodowałaby nieskończoną rekurencję podczas wyszukiwania zasobów.

    3. W menu Plik kliknij polecenie Zapisz jako.

    4. W oknie dialogowym Zapisywanie jakokliknij pozycję Mój dokument, wpisz MakeCultures.cs w polu Nazwa pliku, kliknij pozycję Wszystkie Files w polu Zapisz jako typ, a następnie kliknij przycisk Zapisz.

    5. Zamknij Notatnik.

  2. Uruchom aplikację utworzoną w kroku 1, aby utworzyć kulturę niestandardową. W tym celu wykonaj następujące czynności:

    1. Kliknij przycisk Start, kliknij polecenie Uruchom, wpisz polecenie cmd, a następnie kliknij przycisk OK.
    2. Wpisz polecenie cd "Moje dokumenty", a następnie naciśnij klawisz ENTER
    3. Wpisz %windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs, a następnie naciśnij klawisz ENTER.
    4. Wpisz MakeCultures.exe, aby uruchomić program budujący kulturę.

Stan

Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.