Aracılığıyla paylaş


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ı sıralamasını kullanır
Kategori Birlikte çalışabilirlik
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

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ı hazırlama devre dışı bırakıldığında bir yöntem çalışma zamanı sıralamasını kullanıyorsa, türün yerel düzeniyle ilgili farklı beklentiler nedeniyle çalışma zamanında beklenmeyen davranış farklılıklarına neden olabilir.

İhlalleri düzeltme

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

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

Bu kuraldan 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.