Artigo: 939949 - Última revisão: segunda-feira, 3 de Dezembro de 2007 - Revisão: 1.3

Mensagem de erro quando executa uma aplicação ou tenta aceder a um Web site num computador com uma determinada actualização de software do .NET Framework 2.0 instalada: "Culture name 'Culture' is not supported"

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sintomas

Num computador com o Microsoft Windows Server 2003 instalado, o utilizador instala a actualização de software do Microsoft .NET Framework 2.0 descrita no seguinte artigo da Base de Dados de Conhecimento da Microsoft:
928365  (http://support.microsoft.com/kb/928365/ ) Descrição da actualização de segurança para o .NET Framework 2.0 para Windows Server 2003, Windows XP e Windows 2000: 10 de Julho de 2007
Quando executa uma aplicação ou tenta aceder a um Web site no computador, poderá receber a seguinte mensagem de erro:
[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
Além disso, se uma aplicação tiver recursos que utilizem o formato de nome de cultura antigo, e se o nome de cultura do utilizador usar o novo formato de nome de cultura, a aplicação não conseguirá localizar recursos para o formato de nome de cultura antigo.

Causa

A actualização de software mencionada na secção "Sintomas" é uma actualização cumulativa para o .NET Framework 2.0. Esta actualização inclui alterações aos nomes de culturas. Os novos nomes de culturas seguem a sintaxe das normas IETF (RFC 4646 e RFC 4647). As alterações aos nomes de culturas melhoram a interoperabilidade garantindo que cada região tem um identificador consistente.

Os mapeamentos dos nomes de culturas antigos para os novos nomes de culturas são os seguintes:
Reduzir esta tabelaExpandir esta tabela
Nome de cultura antigo Nome de cultura novo
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

Como contornar

Para contornar este problema, compile culturas personalizadas a partir das novas regiões que utilizam os nomes de culturas antigos. Para tal, siga estes passos.

Nota: tem de ter o .NET Framework 2.0 instalado para utilizar o programa de exemplo aqui fornecido.
  1. Crie uma aplicação que possa ser utilizada para compilar uma cultura personalizada. Para o fazer, siga estes passos:
    1. Clique em Iniciar, clique em Executar, escreva notepad e clique em OK.
    2. Cole o seguinte código no Bloco 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 exemplo define os principais das novas culturas para as culturas antigas. Os principais das culturas antigas não podem ser as novas culturas em simultâneo, uma vez que esta situação provocará recursão infinita durante a pesquisa de recursos.
    3. No menu Ficheiro, clique em Guardar como.
    4. Na caixa de diálogo Guardar como, clique em Os meus documentos, escreva MakeCultures.cs na caixa Nome de ficheiro, clique em Todos os ficheiros na caixa Guardar com o tipo e clique em Guardar.
    5. Feche o Bloco de notas.
  2. Execute a aplicação criada no passo 1 para compilar uma cultura personalizada. Para o fazer, siga estes passos:
    1. Clique em Iniciar, clique em Executar, escreva cmd e clique em OK.
    2. Escreva cd "Os meus documentos" e prima ENTER
    3. Escreva %windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs e prima ENTER.
    4. Escreva MakeCultures.exe para executar o programa para compilar a cultura.

Ponto Da Situação

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 2.0
Palavras-chave: 
kbbug kbfix kbsecvulnerability kbqfe kbsecurity kbsecbulletin kbpubtypekc kbexpertiseadvanced KB939949