CA1421: Il metodo usa il marshalling di runtime quando viene applicato DisableRuntimeMarshallingAttribute

Proprietà valore
ID regola CA1421
Title Il metodo usa il marshalling di runtime quando viene applicato DisableRuntimeMarshallingAttribute
Categoria Interoperabilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come suggerimento

Causa

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

Descrizione regola

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

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.