CA1421: Method uses runtime marshalling when DisableRuntimeMarshallingAttribute is applied
Property | Value |
---|---|
Rule ID | CA1421 |
Title | Method uses runtime marshalling when DisableRuntimeMarshallingAttribute is applied |
Category | Interoperability |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 8 | As suggestion |
Cause
A method uses runtime marshalling, and runtime marshalling is explicitly disabled.
Rule description
If a method uses runtime marshalling when runtime marshalling is disabled, it can cause unexpected behavior differences at run time due to different expectations of a type's native layout.
How to fix violations
Enable runtime marshalling or use features like sizeof
and pointers to ensure accurate results.
When to suppress warnings
Don't suppress a warning from this rule.
Example
The following code snippet shows a violation of 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
To fix the violation, remove the DisableRuntimeMarshallingAttribute attribute on the assembly.
GitHub पर हमारे साथ सहयोग करें
इस सामग्री का स्रोत GitHub पर पाया जा सकता है, जहाँ आप समस्याएँ बना और समीक्षा भी कर सकते हैं और अनुरोध खींच सकते हैं. अधिक जानकारी के लिए, हमारे योगदानकर्ता गाइड देखें.