Share via


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

Elemento Valor
RuleId CA1302
Category Microsoft.Globalization
Cambio importante Poco problemático

Causa

Un método usa un literal de cadena que representa parte de la ruta de acceso de determinadas carpetas del sistema.

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

La enumeración System.Environment.SpecialFolder contiene miembros que hacen referencia a carpetas especiales del sistema. La ubicación de estas carpetas puede tener diferentes valores en sistemas operativos distintos, el usuario puede cambiar alguna de estas ubicaciones y las ubicaciones están localizadas. Un ejemplo de una carpeta especial es la carpeta System, que es "C:\WINDOWS\system32". El método System.Environment.GetFolderPath devuelve las ubicaciones asociadas a la enumeración Environment.SpecialFolder. Las ubicaciones devueltas por GetFolderPath están localizadas y son adecuadas para el equipo actualmente en ejecución.

Esta regla tokeniza las rutas de acceso de carpeta que se recuperan mediante el método GetFolderPath en niveles de directorio independientes. Cada literal de cadena se compara con los tokens. Si se encuentra una coincidencia, se supone que el método está creando una cadena que hace referencia a la ubicación del sistema asociada al token. Por razones de portabilidad y localización, use el método GetFolderPath para recuperar las ubicaciones de las carpetas especiales del sistema en lugar de usar 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 las advertencias

Es seguro suprimir una advertencia de esta regla 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

En el ejemplo siguiente se compila la ruta de acceso de la carpeta de datos común de la aplicación, que genera tres advertencias de esta regla. A continuación, el ejemplo recupera la ruta de acceso mediante el método GetFolderPath.

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

CA1303: No pasar literales como parámetros localizados