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 8 | 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 usa marshalling de runtime quando o marshalling runtime está desabilitado, isso 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 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.