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 9'da 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.