特定の .NET Framework 2.0 ソフトウェア更新プログラムがインストールされているコンピューターでアプリケーションを実行したり、Web サイトにアクセスしたりすると、"カルチャ名 'Culture' はサポートされていません" というエラー メッセージが表示される

現象

Microsoft Windows Server 2003 がインストールされているコンピューターに、次の「サポート技術情報」 (Microsoft サポート技術情報) の記事に記載されている Microsoft .NET Framework 2.0 ソフトウェア更新プログラムをインストールします。

928365 Windows Server 2003、Windows XP、および Windows 2000 用の .NET Framework 2.0 のセキュリティ更新プログラムについて 2007 年 7 月 11 日

 コンピューターでアプリケーションを実行するか、Web サイトにアクセスしようとすると、次のエラー メッセージが表示されることがあります。

注

[System.ArgumentException] : カルチャ名 'Culture' は、次の 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-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 bs-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

回避策

この問題を回避するには、古いカルチャ名を使用する新しいロケールからカスタム カルチャを作成します。 そのためには、以下の手順を実行します。

注: ここに記載されているサンプル プログラムを使用するには、.NET Framework 2.0 がインストールされている必要があります。

  1. カスタム カルチャの構築に使用できるアプリケーションを作成します。 手順は次のとおりです。

    1. [ スタート]、[ ファイル名を指定して実行] の順にクリックし、「メモ帳」と入力して、[ OK] をクリックします。

    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」と入力し、[OK] をクリックします。
    2. cd「 My Documents」と入力し、Enter キーを押します
    3. 「%windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs」と入力し、Enter キーを押します。
    4. 「MakeCultures.exe」と入力して、カルチャを構築するプログラムを実行します。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。