‘member’는 참조로 마샬링하는 클래스의 필드이므로 여기에 있는 멤버에 액세스하면 런타임 예외가 발생할 수 있습니다.
이 경고는 MarshalByRefObject로부터 파생되는 클래스의 멤버에 있는 메서드, 속성 또는 인덱서를 호출하려고 하고 멤버가 값 형식일 때 발생합니다. MarshalByRefObject에서 상속되는 개체는 일반적으로 애플리케이션 도메인 전체에서 참조로 마샬링됩니다. 애플리케이션 도메인에서 그러한 개체의 값 형식 멤버에 직접 액세스하려고 시도하는 코드가 있을 경우 런타임 InvalidOperationException이 발생합니다. 이 경고를 해결하려면 먼저 멤버를 지역 변수에 복사하고 해당 변수에서 메서드를 호출합니다.
다음 샘플에서는 CS1690 경고가 발생합니다.
// CS1690.cs
using System;
class WarningCS1690 : MarshalByRefObject
{
int i = 5;
public static void Main()
{
AppDomain domain = AppDomain.CreateDomain("MyDomain");
Type t = typeof(WarningCS1690);
WarningCS1690 e = (WarningCS1690)domain.CreateInstanceAndUnwrap(t.Assembly.FullName,t.FullName);
e.i.ToString(); // CS1690
// OK
int i = e.i;
i.ToString();
e.i = i;
}
}
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET