Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La regla de analizador de código de .NET CA1417 está habilitada, de forma predeterminada, a partir de .NET 5. Genera una advertencia de compilación para las definiciones de métodos de invocación de plataforma (P/Invoke) en las que un String parámetro se pasa por valor y se marca con OutAttribute.
Descripción del cambio
A partir de .NET 5, el SDK de .NET incluye analizadores de código fuente de .NET. Varias de estas reglas están habilitadas de forma predeterminada, incluido CA1417. Si el proyecto contiene código que infringe esta regla y está configurado para tratar las advertencias como errores, este cambio podría interrumpir la compilación.
La regla CA1417 marca las definiciones de método P/Invoke donde un String parámetro está marcado con el OutAttribute atributo y se pasa por valor. Por ejemplo:
[DllImport("MyLibrary")]
private static extern void PIMethod([Out] string s);
El entorno de ejecución de .NET mantiene una tabla, denominada grupo de internados, que contiene una sola referencia a cada cadena literal única de un programa. Si una cadena internada marcada con OutAttribute se pasa por valor a un método P/Invoke, el tiempo de ejecución se puede desestabilizar. Para obtener más información sobre la asignación al grupo interno de cadenas, vea los comentarios sobre String.Intern(String).
Versión introducida
5.0
Acción recomendada
Si necesita serializar los datos modificados de la cadena de vuelta al autor de la llamada, pase la cadena por referencia en su lugar.
[DllImport("MyLibrary")] private static extern void PIMethod(out string s);Si no necesita serializar los datos modificados de la cadena de vuelta al autor de la llamada, simplemente quite el elemento OutAttribute.
[DllImport("MyLibrary")] private static extern void PIMethod(string s);Para obtener más información, consulte CA1417.
Para deshabilitar completamente el análisis de código, establezca
EnableNETAnalyzersfalseen el archivo del proyecto. Para obtener más información, consulte EnableNETAnalyzers.
Las APIs afectadas
No se puede detectar a través del análisis de API.