Condividi tramite


CA1421: Il metodo utilizza il marshalling di runtime quando viene applicato l'attributo DisableRuntimeMarshallingAttribute

Proprietà valore
ID regola CA1421
Title Quando viene applicato DisableRuntimeMarshallingAttribute, il metodo usa il marshalling di runtime.
Categoria Interoperabilità
La correzione causa un'interruzione o meno Non rompente
Abilitato per impostazione predefinita in .NET 10 Come suggerimento
Linguaggi applicabili C# e Visual Basic

Causa

Un metodo usa il marshalling di runtime e il marshalling di runtime è disabilitato in modo esplicito.

Descrizione regola

Se un metodo utilizza il marshalling di runtime quando esso è disabilitato, può causare differenze di comportamento impreviste in fase di esecuzione a causa di aspettative diverse sul layout nativo di un tipo di dati.

Come correggere le violazioni

Abilitare il marshalling di runtime o usare funzionalità come sizeof e puntatori per garantire risultati accurati.

Quando eliminare gli avvisi

Non eliminare un avviso da questa regola.

Esempio

Il frammento di codice seguente mostra una violazione di 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

Per correggere la violazione, rimuovere l'attributo DisableRuntimeMarshallingAttribute nell'assembly.