現象
Microsoft Windows Server 2003 がインストールされているコンピュータに、「サポート技術情報」 (Microsoft Knowledge Base) の以下の資料に記載されている Microsoft .NET Framework 2.0 ソフトウェア更新プログラムをインストールします。
928365 Windows Server 2003、Windows XP、および Windows 2000 用の .NET Framework 2.0 のセキュリティ更新プログラム (2007 年 7 月 10 日) について
コンピュータでアプリケーションを実行するか、Web サイトにアクセスするときに、次のエラー メッセージが表示されることがあります。
[System.ArgumentException] : Culture name 'Culture' is not supported for the following 13 cultures: 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 |
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 |
回避策
この問題を回避するには、従来のカルチャ名を使用している新しいロケールからカスタム カルチャを作成します。これを行うには、以下の手順を実行します。
注 : ここに掲載されているサンプル プログラムを使用するには、.NET Framework 2.0 がインストールされている必要があります。
-
カスタム カルチャの作成に使用できるアプリケーションを作成します。これを行うには、以下の手順を実行します。
-
[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。次に、notepad と入力し、[OK] をクリックします。
-
メモ帳に以下のコードを貼り付けます。
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);
}
}
}注 : このサンプル プログラムでは、新しいカルチャの親を従来のカルチャに設定します。従来のカルチャの親を同時に新しいカルチャにすると、リソースの検索時に無限再帰が発生するため、そのような設定はできません。
-
[ファイル] メニューの [名前を付けて保存] をクリックします。
-
[名前を付けて保存] ダイアログ ボックスで、[マイ ドキュメント] をクリックし、[ファイル名] ボックスに MakeCultures.cs と入力し、[ファイルの種類] ボックスの一覧で [すべてのファイル] をクリックし、[保存] をクリックします。
-
メモ帳を終了します。
-
-
手順 1. で作成したアプリケーションを実行して、カスタム カルチャを作成します。これを行うには、以下の手順を実行します。
-
[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、cmd と入力し、[OK] をクリックします。
-
cd "My Documents" と入力し、Enter キーを押します。
-
%windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs と入力し、Enter キーを押します。
-
MakeCultures.exe と入力してプログラムを実行し、カルチャを作成します。
-
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。