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.