CA1302: No codificar las cadenas específicas de configuración regional
TypeName |
DoNotHardcodeLocaleSpecificStrings |
Identificador de comprobación |
CA1302 |
Categoría |
Microsoft.Globalization |
Cambio problemático |
Poco problemático |
Motivo
Un método utiliza un literal de cadena que representa parte de la ruta de acceso de determinadas carpetas del sistema.
Descripción de la regla
La enumeración SpecialFolder contiene miembros que hacen referencia a carpetas del sistema especiales.La ubicación de estas carpetas puede tener diferentes valores en sistemas operativos distintos, el usuario puede cambiar alguna de estas ubicaciones y además, están adaptadas.Un ejemplo de carpeta especial es la carpeta System, que es la carpeta "C:\WINDOWS\system32" en Windows XP, pero "C:\WINNT\system32" en Windows 2000.El método Environment.GetFolderPath devuelve las ubicaciones asociadas a la enumeración SpecialFolder.Las ubicaciones devueltas por GetFolderPath se adaptan y se adecuan al equipo actualmente en ejecución.
Esta regla asigna un símbolo (token) a las rutas de acceso de la carpeta recuperadas mediante el método GetFolderPath en niveles de directorio independientes.Cada literal de cadena se compara con los tokens.Si se encuentra alguna coincidencia, se supone que el método compila una cadena que hace referencia a la ubicación del sistema asociada al token.Para la portabilidad y adaptabilidad, utilice el método GetFolderPath para recuperar las ubicaciones de las carpetas del sistema especiales en lugar de utilizar los literales de cadena.
Cómo corregir infracciones
Para corregir una infracción de esta regla, recupere la ubicación mediante el método GetFolderPath.
Cuándo suprimir advertencias
Suprimir las advertencias de esta regla es un método seguro si el literal de cadena no se usa para hacer referencia a una de las ubicaciones del sistema asociadas a la enumeración SpecialFolder.
Ejemplo
El ejemplo siguiente compila la ruta de acceso de la carpeta de datos de la aplicación común, que genera tres advertencias de esta regla.Después, el ejemplo recupera la ruta de acceso mediante el 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));
}
}
}