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.