2014-04-27 6 views
1
System.MissingMethodException: Method not found: 
    'System.Collections.Generic.List`1<!!0> 
    BusinessEntities.Helper.Sort(System.Func`2<!!0,!!0>)' 

의 정렬 확장 메서드를 들어, System.MissingMethodException 얻기. IIS에서 빌드를 배포하고 페이지를 실행할 때 위의 오류가 발생합니다. Visual Studio에서 웹 사이트를 디버그 모드로 실행하면 정상적으로 실행됩니다.나는 비주얼 스튜디오 웹 배포 프로젝트를 이용하여 제조 된 website.The 웹 사이트 구축의 페이지에이 오류가 일반적인 목록

배경 : .NET 3.5 클래스 라이브러리 프로젝트 인 BusinessEntities 프로젝트를 참조하는 asp.net 4.0 웹 사이트가 있습니다. 프로젝트에는 개체의 일반적인 목록을 정렬하기위한 정렬 메서드 Sort가있는 공용 정적 Helper 클래스가 포함되어 있습니다. Helper 클래스는 BusinessEntities 네임 스페이스에 있습니다.

BusinessEntites 프로젝트의 버전을 .Net 4.0으로 변경 한 다음 웹 사이트를 빌드하면이 오류가 발생하지 않습니다. 일부 운영 제한으로 인해 프로젝트를 4.0으로 업그레이드 할 수 없습니다.

이상한 점은 일반적인 확장 방법과 웹 사이트 및 프로젝트 구조가 아무런 문제없이 1 년 이상 솔루션으로 사용되었다는 것입니다. 나는이 오류가 갑자기 왜 튀어 나오는 지 이해하지 못하고있다.

답변

2

MissingMethodException은 빌드하는 동안 참조한 것과 다른 버전의 dll을로드한다는 것을 의미합니다. 실제로로드하는 (실행시) dll에는 컴파일러에서 찾은 방법이 없습니다. 컴파일 타임).

프로젝트에서 참조 된 동일한 dll의 버전이 어떻게 됐는지 확인하십시오. 그것은 당신이 디버그 모드에서 실행할 때, 다른 어떤 코드는 올바른 dll로드를 먼저 만든다.하지만 릴리스에서 실행될 때 참조 불일치로 인해 다른 dll이로드되거나 어딘가에 여러 버전이있을 수있다. 나는이 같은 문제에 직면했다

+0

웹 사이트에는 BusinessEntities 프로젝트에 대한 프로젝트 참조가 있습니다. BusinessEntities.dll의 datetime 스탬프를 확인하고 프로젝트의 현재 타임 스탬프와 일치시킵니다. 나는 심지어 프로젝트 빌드에서 최신 dll을 웹 사이트 빌드로 바꾸려고 시도했다. 아직도 didnt 한 일. 빌드에 같은 이름을 가진 다른 dll은 없습니다. 페이지에서 정렬 방법을 주석 처리하면 문제없이 작동합니다. 즉, BusinessEntites 프로젝트의 다른 클래스는 빌드에서 액세스 할 수 있습니다. 또한, 왜 프로젝트 타겟 프레임 워크를 4.0으로 변경할 때이 문제가 발생하지 않는지 궁금합니다. – drj

+0

모든 참조, dll 및 다시 컴파일을 시도 했습니까? 혹시 DLL이 GAC에있을 수 있습니까? –

+0

예, 삭제, 청소 및 재구성을 시도했습니다. GAC에 프로젝트 DLL을 추가하지 않았습니다. 그러나 GAC에서 확인하기 만하면됩니다. 임시 asp.net 파일을 삭제하려고 시도했습니다. – drj

-1

, 나는 1. 청소 당신 솔루션 2. 수동 청소 bin 폴더 3. 삭제 임시 폴더 4.하는 솔루션을 다시 ... 단계 이하로 사용하여 해결했습니다.