디자이너에서 양식을 열 때 누락 된 METHODEXCEPTion; 런타임은 잘 작동합니다
-
19-09-2019 - |
문제
이 속성이있는 클래스 A와 함께 Projoct A가 있다고 가정 해 봅시다.
public bool IsConnected { get { return m_isConnected; } private set { m_isConnected = value; } }
동일한 솔루션에는 프로젝트 A를 참조하고 사용자 컨트롤이있는 프로젝트 B가 있습니다. 로그인. 이 컨트롤에는이 속성이 있습니다.
private A m_A = null;
그리고 의식자에서 로그인 나는이 전화를한다 :
if (m_a! = null && m_a.isconnected) {...}
동일한 프로젝트에서 주요 양식에는 양식 디자이너와 함께 추가 된 사용자 컨트롤 A가 있습니다. 프로그램은 잘 작동 하며이 속성은 올바르게 읽습니다.
그러나 디자이너에서 기본 양식을 열 때이 execption : MissingMethodexception : 'boolean A.get_isconnected ()'
m_a.isconcected를 언급하면서 디자이너를 사용하겠습니다. 그러나 이것은 꽤 성가신 것입니다. 때로는 무작위로 작동하는 것처럼 보입니다.
어떤 아이디어?
해결책
나는 과거에 이것을 들었습니다. 디자인 모드는 항상 완벽하게 신뢰할 수있는 것은 아닙니다. 당신이 사용할 수있는 다른 옵션은 사전 처리기 지시문입니다.
#if DESIGN
return;
#else
if (m_A != null && m_A.IsConnected) { /* etc. */ }
#endif
그런 다음 Design이라는 조건부 편집 기호를 추가하면 황금이어야합니다.
다른 팁
언급하는 대신 사용할 수 있습니다.
if (this.DesignMode)
{
return;
}
또는
if (!this.DesignMode)
{
if (m_A != null && m_A.IsConnected) { ... }
}
편집 : 싱글 톤 수업에 한 번 문제가있는 것을 기억합니다. 문제는 생성자가 호출되지 않았지만 싱글 톤은 항상 초기화되었다는 것입니다. 내가 당신의 문제를 올바르게 이해하면 당신의 문제도 마찬가지입니다. 당신의 회원 M_A는 그럴 필요가 있지만 결코 무효가되지 않습니다.
다음과 함께 문제를 관리했습니다.
Visual Studio에서 "도구 옵션 ... Debugging General"으로 이동하여 "속성 평가 및 기타 암시 기능 호출 활성화"를 비활성화하고 "속성 및 연산자 (관리자 만 관리)를 활성화합니다.
어쩌면 그것은 도움이 될 것입니다.
Ari Roth DesignMode가 언급 한 바와 같이 제대로 작동하지 않습니다. 이를 보상하기 위해이 확장 방법을 사용합니다.
public static bool IsDesignTime(this Control control)
{
if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{
return true;
}
if (control.Site != null && control.Site.DesignMode)
{
return true;
}
var parent = control.Parent;
while (parent != null)
{
if (parent.Site != null && parent.Site.DesignMode)
{
return true;
}
parent = parent.Parent;
}
return false;
}
Simon Linder가 설명하는 것과 같은 방식으로 사용하십시오.
디자이너가 연결된 속성이없는 기존 버전의 Control DLL을 사용하는 것처럼 보입니다.
MissingMethodexception 예외는 M_A의 값과 관련이 없습니다. 재산이 누락되었다고 불평하는 JIT 컴파일러입니다. M_A.ISCONCHENTED에 호출을 랩핑하면이 메소드가 호출되지 않기 때문에 (M_A는 실제로 NULL이기 때문에) 작동하지 않으므로 연결된 속성이 필요하지 않습니다.
컨트롤을 VS에 양식에 넣으면 설계자는 양식에서 제어의 "실제"인스턴스를 생성하여 생성자를 호출하여 JIT 컴파일 문제를 일으 킵니다.