| 속성 | 값 |
|---|---|
| 규칙 ID | CA1421 |
| 제목 | DisableRuntimeMarshallingAttribute가 적용될 때 메서드는 런타임 마샬링을 사용합니다. |
| 범주 | 상호 운용성 |
| 수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
| .NET 10에서 기본적으로 사용하도록 설정 | 제안 사항 |
원인
메서드는 런타임 마샬링을 사용하며 런타임 마샬링이 명시적으로 사용하지 않도록 설정됩니다.
규칙 설명
런타임 마샬링을 사용하지 않도록 설정할 때 메서드가 런타임 마샬링을 사용하는 경우 형식의 네이티브 레이아웃에 대한 기대가 다르기 때문에 런타임 시 예기치 않은 동작 차이가 발생할 수 있습니다.
위반 문제를 해결하는 방법
런타임 마샬링을 사용하도록 설정하거나 sizeof 및 포인터와 같은 기능을 사용하여 정확한 결과를 보장합니다.
경고를 표시하지 않는 경우
이 규칙의 경고는 표시해야 합니다.
예
다음 코드 조각은 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
위반 문제를 해결하려면 어셈블리에서 DisableRuntimeMarshallingAttribute 특성을 제거합니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET