Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| 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.