Bagikan melalui


CA1421: Metode menggunakan marshalling runtime saat DisableRuntimeMarshallingAttribute diterapkan

Properti Nilai
ID Aturan CA1421
Judul Metode menggunakan marshalling runtime saat DisableRuntimeMarshallingAttribute diterapkan
Golongan Interoperabilitas
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 9 Sebagai saran

Penyebab

Metode menggunakan marshalling runtime, dan marshalling runtime dinonaktifkan secara eksplisit.

Deskripsi aturan

Jika metode menggunakan marshalling runtime saat marshalling runtime dinonaktifkan, metode tersebut dapat menyebabkan perbedaan perilaku yang tidak terduga pada run time karena harapan yang berbeda dari tata letak asli jenis.

Cara memperbaiki pelanggaran

Aktifkan marshalling runtime atau gunakan fitur seperti sizeof dan penunjuk untuk memastikan hasil yang akurat.

Kapan harus menekan peringatan

Jangan menekan peringatan dari aturan ini.

Contoh

Cuplikan kode berikut menunjukkan pelanggaran 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

Untuk memperbaiki pelanggaran, hapus DisableRuntimeMarshallingAttribute atribut pada assembly.