Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA1421 |
| Title | Il metodo usa il marshalling di runtime quando viene applicato DisableRuntimeMarshallingAttribute |
| Categoria | Interoperabilità |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | Come suggerimento |
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.