Compartir a través de


CA1302: No codificar las cadenas específicas de configuración regional

Nombre de tipo

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 System.Environment.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 Environment.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 Environment.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));
      }
   }
}

Reglas relacionadas

CA1303: No pasar literales como parámetros localizados