Compartilhar via


CA1421: o método usa marshalling de runtime quando DisableRuntimeMarshallingAttribute é aplicado

Property Valor
ID da regra CA1421
Título O método usa marshalling de runtime quando DisableRuntimeMarshallingAttribute é aplicado
Categoria Interoperabilidade
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 10 Como sugestão

Causa

Um método usa marshaling de runtime e o marshaling de runtime está explicitamente desabilitado.

Descrição da regra

Se um método utiliza marshaling em tempo de execução quando este está desabilitado, pode causar diferenças de comportamento inesperadas em tempo de execução devido a expectativas diferentes sobre o layout nativo de um tipo.

Como corrigir violações

Habilite o marshalling de runtime ou use recursos como sizeof e ponteiros e para garantir resultados precisos.

Quando suprimir avisos

Não suprima um aviso nessa regra.

Exemplo

O seguinte snippet de código mostra uma violação de 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 corrigir a violação, remova o atributo DisableRuntimeMarshallingAttribute no assembly.