Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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.