CA1421: DisableRuntimeMarshallingAttribute uygulandığında yöntem çalışma zamanı sıralamasını kullanır

Özellik Değer
Kural Kimliği CA1421
Başlık DisableRuntimeMarshallingAttribute uygulandığında yöntem çalışma zamanı veri aktarımını kullanır.
Kategori Birlikte çalışabilirlik
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Öneri olarak
Geçerli diller C# ve Visual Basic

Neden

Bir yöntem çalışma zamanı hazırlamayı kullanır ve çalışma zamanı hazırlama açıkça devre dışı bırakılır.

Kural açıklaması

Çalışma zamanı eşlemesi devre dışı bırakıldığında bir yöntem çalışma zamanı eşlemesini kullanıyorsa, türün yerel bellekteki düzeniyle ilgili farklı beklentiler nedeniyle çalışma zamanında beklenmeyen davranış farklılıklarına neden olabilir.

İhlalleri düzeltme

Çalışma zamanı marşallemeyi etkinleştirin veya doğru sonuçlar elde etmek için sizeof ve işaretçiler gibi özellikleri kullanın.

Uyarıların ne zaman bastırılması gerekiyor?

Bu kurala ait bir uyarıyı gizlemeyin.

Örnek

Aşağıdaki kod parçacığı CA1421 ihlalini gösterir:

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

İhlali düzeltmek için derlemedeki DisableRuntimeMarshallingAttribute özniteliğini kaldırın.