Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
| 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 10 | 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 utilizar marshalling em tempo de execução quando este está desativado, pode causar diferenças inesperadas no comportamento em tempo de execução, devido a diferentes expectativas quanto ao 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 seguinte trecho 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 DisableRuntimeMarshallingAttribute atributo no assembly.