Сообщение об ошибке при запуске приложения или попытке доступа к веб-сайту на компьютере, на котором установлено определенное обновление программного обеспечения платформы .NET Framework 2.0: "Имя языка и региональных параметров "Culture" не поддерживается"

Проблема

На компьютере, на котором установлена Windows Server 2003, необходимо установить обновление программного обеспечения Microsoft .NET Framework 2.0, описанное в следующей статье базы знаний Майкрософт:

928365 Описание обновления системы безопасности для платформа .NET Framework 2.0 за Windows Server 2003, Windows XP и Windows 2000: 10 июля 2007 г.

 При запуске приложения или попытке доступа к веб-сайту на компьютере может появиться следующее сообщение об ошибке:

Примечание

[System.ArgumentException]: имя языка и региональных параметров "Культура" не поддерживается для следующих 13 языков и региональных параметров: 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

Кроме того, если в приложении есть ресурсы, использующие старый формат имени языка и региональных параметров пользователя использует новый формат имени языка и региональных параметров, приложение не сможет найти ресурсы для старого формата имени языка и региональных параметров.

Причина

Обновление программного обеспечения, упомянутое в разделе "Симптомы", является накопительным пакетом обновления для платформы .NET Framework 2.0. Это обновление содержит изменения в именах языковых стандартов. Новые имена языковых параметров соответствуют синтаксису стандартов IETF (RFC 4646 и RFC 4647). Изменения в именах языковых стандартов повышают функциональную совместимость благодаря использованию согласованного идентификатора для каждого языкового стандарта.

Сопоставления старых имен языков и региональных параметров выглядят следующим образом:

Старое название культуры Новое имя языка и региональных параметров
az-AZ-Latn az-Latn-AZ
uz-UZ-Latn uz-Latn-UZ
sr-SP-Latn sr-Latn-CS
аз-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 RU-029

Временное решение

Чтобы обойти эту проблему, создайте собственные языковые параметры и региональные параметры на основе новых языковых стандартов, использующих старые имена языковых параметров. Для этого выполните указанные ниже действия.

Примечание. Чтобы можно было использовать приведенный здесь пример программы, необходимо установить платформу .NET Framework 2.0.

  1. Создайте приложение, которое можно использовать для создания пользовательского языка и региональных параметров. Для этого выполните указанные ниже действия.

    1. Нажмите кнопку "Пуск", щелкните "Выполнить", введите блокнот и нажмите кнопку "ОК".

    2. Вставьте следующий код в Блокнот.

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

      Примечание. Этот пример программы задает родителями новых языков и региональных параметров старые языковые стандарты. Родители старых культур не могут быть одновременно и новыми, потому что эта ситуация вызвала бы бесконечную рекурсию при поиске ресурсов.

    3. В меню Файл выберите пункт Сохранить как.

    4. В диалоговом окне "Сохранить как" выберите пункт "Мой документ", введите MakeCultures.cs в поле "Имя файла", щелкните "Все Files" в поле "Тип файла" и нажмите кнопку "Сохранить".

    5. Выйдите из Блокнота.

  2. Запустите приложение, созданное на шаге 1, чтобы создать пользовательский язык и региональные параметры. Для этого выполните указанные ниже действия.

    1. Нажмите кнопку "Пуск", нажмите кнопку "Выполнить", введите cmd и нажмите кнопку "ОК".
    2. Введите cd "Мои документы" и нажмите клавишу ВВОД
    3. Введите %windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs и нажмите клавишу ВВОД.
    4. Введите MakeCultures.exe, чтобы запустить программу по созданию языкового стандарта.

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».