Compartilhar via


CA1302: não codificar cadeias de caracteres específicas da localidade

TypeName

DoNotHardcodeLocaleSpecificStrings

CheckId

CA1302

Categoria

Microsoft.Globalization

Alteração Significativa

Sem quebra

Causa

Um método usa uma cadeia de caracteres literal que representa parte do caminho de certas pastas do sistema.

Descrição da Regra

A enumeração SpecialFolder contém membros que se referem a pastas especiais do sistema.Os locais dessas pastas podem ter valores diferentes em diferentes sistemas operacionais, o usuário pode modificar alguns dos locais, e os locais são diferentes para cada idioma.Um exemplo de pasta especial é a pasta do sistema, que é “C:\WINDOWS\system32” em Windows XP mas é “C:\WINNT\system32” em Windows 2000.O método retorna os locais Environment.GetFolderPath que estão associados com a enumeração SpecialFolder.Os locais que são retornados por GetFolderPath são localizados e próprios para o computador em execução.

Esta regra cria tokens para os caminhos de pastas recuperados usando o método GetFolderPath em níveis distintos de diretório.Cada cadeia de caracteres literal é comparada aos tokens.Se uma correspondência for encontrada, assume-se que o método está criando uma cadeia de caracteres referente ao local do sistema associado com o token.Para a portabilidade e a localização, use o método GetFolderPath para recuperar os locais das pastas de sistema especiais em vez de usar cadeias de caracteres literais.

Como Corrigir Violações

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

Quando Suprimir Alertas

É seguro suprimir um aviso resultante desta regra se a cadeia de caracteres literal não é for para fazer referência a um dos locais do sistema associados com a enumeração SpecialFolder.

Exemplo

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

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 passar literais como parâmetros localizados