다른 어셈블리에서 WebPart 하위 클래스를 만드는 동안 오류가 발생했습니다.

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

  •  09-06-2019
  •  | 
  •  

문제

우리가 만드는 모든 WebPart의 상위 역할을 할 WebPart의 하위 클래스를 만들려고 합니다.동일한 프로젝트에 빈 클래스를 생성하면 예상대로 그 클래스에서 상속할 수 있습니다.그러나 다른 어셈블리(클래스를 참조하고 사용할 수 있었던 어셈블리)에 배치하려고 하면 다음 오류가 발생합니다.

요청한 유형 중 하나 이상을 로드할 수 없습니다.자세한 내용은 LoaderExceptions 속성을 검색하세요.

관련될 수 있는 기타 정보(저는 일반적으로 SharePoint 개발자가 아닙니다):dll을 컴파일하고 개발 프로젝트에서 참조한 후 SharePoint 인스턴스의 /bin 디렉터리에 복사합니다.어셈블리가 모두 서명되었습니다.VS2008의 '배포' 기능을 사용하여 배포하려고 합니다.

안타깝게도 이는 SharePoint 관련 오류가 아닌 것으로 보이며 문제를 해결하는 방법을 잘 모르겠습니다.누구든지 이것을 경험해 보았고 어떤 제안이 있습니까?

도움이 되었습니까?

해결책

네, 문제를 찾았습니다.패키징 작업은 어떤 이유로든 리플렉션을 사용합니다.귀하의 클래스가 다른 도메인의 클래스에서 상속된 것을 발견하면 리플렉션을 사용하여 해당 클래스를 로드하려고 시도합니다.그러나 리플렉션은 바인딩 정책을 수행하지 않으므로 해당 도메인이 로드되지 않습니다.

패키징 프로그램 작성자는 다음 코드를 추가하여 이 문제를 해결할 수 있습니다.

AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
Assembly a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(filename);

static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
    return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}

그러나 프로젝트에 대한 솔루션이 필요한 경우 어셈블리를 GAC에 추가하면 문제를 해결할 수 있습니다.

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