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));
}
}
}