Partilhar via


CA1421: Método usa empacotamento de tempo de execução quando DisableRuntimeMarshallingAttribute é aplicado

Property valor
ID da regra CA1421
Título O método usa o empacotamento de tempo de execução quando DisableRuntimeMarshallingAttribute é aplicado
Categoria Interoperabilidade
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como sugestão

Motivo

Um método usa empacotamento de tempo de execução, e o empacotamento de tempo de execução é explicitamente desabilitado.

Descrição da regra

Se um método usa empacotamento de tempo de execução quando o empacotamento de tempo de execução está desabilitado, ele pode causar diferenças de comportamento inesperadas em tempo de execução devido a diferentes expectativas do layout nativo de um tipo.

Como corrigir violações

Habilite a organização em tempo de execução ou use recursos como sizeof ponteiros para garantir resultados precisos.

Quando suprimir avisos

Não suprima um aviso desta regra.

Exemplo

O trecho de código a seguir 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 DisableRuntimeMarshallingAttribute atributo no assembly.