디자이너에서 양식을 열 때 누락 된 METHODEXCEPTion; 런타임은 잘 작동합니다

StackOverflow https://stackoverflow.com/questions/2222218

문제

이 속성이있는 클래스 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 컴파일 문제를 일으 킵니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top