Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA1421 |
| Título | El método utiliza la serialización en tiempo de ejecución cuando se aplica el atributo DisableRuntimeMarshallingAttribute |
| Categoría | Interoperabilidad |
| La corrección interrumpe o no interrumpe | Sin interrupción |
| Habilitado de forma predeterminada en .NET 10 | Como sugerencia |
| Idiomas aplicables | C# y Visual Basic |
Causa
Un método usa la serialización en tiempo de ejecución, y la serialización en tiempo de ejecución está deshabilitada explícitamente.
Descripción de la regla
Si un método usa la serialización en tiempo de ejecución cuando la serialización en tiempo de ejecución está deshabilitada, puede provocar diferencias de comportamiento inesperadas en tiempo de ejecución debido a diferentes expectativas del diseño nativo de un tipo.
Cómo corregir infracciones
Habilite la intermediación en tiempo de ejecución o utilice características tales como sizeof y punteros para garantizar resultados precisos.
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.
Ejemplo
El siguiente fragmento de código muestra una infracción de la regla CA1421:
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: DisableRuntimeMarshalling]
class C
{
public void Test()
{
nint offset = Marshal.OffsetOf(typeof(ValueType), "field");
}
}
struct ValueType
{
int field;
}
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
<Assembly: DisableRuntimeMarshalling>
Class C
Shared Sub S1()
Dim offset As IntPtr = Marshal.OffsetOf(GetType(ValueType), "field")
End Sub
End Class
Structure ValueType
Dim field As Integer
End Structure
Para corregir la infracción, quite el atributo DisableRuntimeMarshallingAttribute del ensamblado.