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.