CA1302: Fazer não codificar seqüências específicas de localidade

TypeName

DoNotHardcodeLocaleSpecificStrings

CheckId

CA1302

<strong>Categoria</strong>

Microsoft.Globalization

Alteração significativa

Não-separável

Causa

Um método usa uma seqüência de caracteres literal que representa a parte do caminho de determinadas pastas do sistema.

Descrição da regra

O System.Environment.SpecialFolder enumeração contém membros que se referem a pastas de sistema especial. Os locais dessas pastas podem ter valores diferentes em diferentes sistemas operacionais, o usuário pode alterar alguns dos locais e os locais são localizados. Um exemplo de uma pasta especial é a pasta do sistema, o que é "C:\WINDOWS\system32" em Windows XP , mas "C:\WINNT\system32" on Windows 2000. O Environment.GetFolderPath método retorna os locais que estão associados a Environment.SpecialFolder enumeração. Os locais que são retornados por GetFolderPath são localizadas e apropriado para o computador em execução no momento.

Esta regra divide os caminhos de pasta são recuperados usando o GetFolderPath método em níveis de diretório separado. Cada seqüência de caracteres literal é comparado com os tokens. Se uma correspondência for encontrada, presume-se que o método está criando uma cadeia de caracteres que se refere ao local do sistema que está associado com o token. Para portabilidade e possibilidade de localização, use o GetFolderPath método para recuperar os locais das pastas especiais do sistema em vez de usar literais de seqüência de caracteres.

Como corrigir violações

Para corrigir uma violação desta regra, recuperar o local usando o GetFolderPath método.

Quando suprimir avisos

É seguro eliminar um aviso esta regra se a seqüência literal não é usada para se referir a um dos locais de sistema que está associado a Environment.SpecialFolder enumeração.

Exemplo

O exemplo a seguir cria o caminho da pasta de dados de aplicativos comuns, que gera três avisos dessa regra. Em seguida, o exemplo recupera o caminho usando o GetFolderPath método.

Imports System

Namespace GlobalizationLibrary

   Class WriteSpecialFolders

      Shared Sub Main()

         Dim string0 As String = "C:"

         ' Each of the following three strings violates the rule.
         Dim string1 As String = "\Documents and Settings"
         Dim string2 As String = "\All Users"
         Dim string3 As String = "\Application Data"
         Console.WriteLine(string0 & string1 & string2 & string3)

         ' The following statement satisfies the rule.
         Console.WriteLine(Environment.GetFolderPath( _ 
            Environment.SpecialFolder.CommonApplicationData))

      End Sub

   End Class

End Namespace
using System;

namespace GlobalizationLibrary
{
   class WriteSpecialFolders
   {
      static void Main()
      {
         string string0 = "C:";

         // Each of the following three strings violates the rule.
         string string1 = @"\Documents and Settings";
         string string2 = @"\All Users";
         string string3 = @"\Application Data";
         Console.WriteLine(string0 + string1 + string2 + string3);

         // The following statement satisfies the rule.
         Console.WriteLine(Environment.GetFolderPath(
            Environment.SpecialFolder.CommonApplicationData));
      }
   }
}

Regras relacionadas

CA1303: Não passe os literais como parâmetros localizados