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.
| Propriedade | Valor |
|---|---|
| ID da regra | CA1421 |
| Título | O método utiliza marshalling em tempo de execução quando o atributo DisableRuntimeMarshallingAttribute é aplicado. |
| Categoria | Interoperabilidade |
| Correção interruptiva ou sem interrupção | Inquebrável |
| Habilitado por padrão no .NET 10 | Como sugestão |
| Idiomas aplicáveis | C# e Visual Basic |
Causa
Um método usa marshaling em tempo de execução, e o marshaling em tempo de execução 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 em tempo de execução ou use recursos como sizeof e ponteiros 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.