Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| 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 10 | Sebagai saran |
Penyebab
Metode menggunakan marshalling runtime, dan marshalling runtime dinonaktifkan secara eksplisit.
Deskripsi aturan
Jika metode menggunakan marshalling runtime pada saat marshalling runtime dinonaktifkan, hal ini dapat menyebabkan perbedaan perilaku tak terduga pada saat runtime karena perbedaan ekspektasi dari tata letak asli dari 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.