[c#] System.MissingMethodException : 메서드를 찾을 수 없습니까?



Answers

서버에 올바른 .NET Framework 버전을 설치하여이 문제를 해결했습니다. 웹 사이트는 버전 4.0에서 실행 중이며 호출 대상이었던 어셈블리는 4.5 용으로 컴파일되었습니다. .NET Framework 4.5를 설치하고 웹 사이트를 4.5로 업그레이드하면 모두 정상적으로 작동합니다.

Question

한 번 내 asp.net webforms 애플 리케이션에서 일하는이 오류가 throw됩니다.

System.MissingMethodException : 메서드를 찾을 수 없습니다.

DoThis 메서드는 같은 클래스에 있으므로 작동해야합니다.

나는 같은 일반 처리기가 있습니다 :

public class MyHandler: IHttpHandler
{
    public void Processrequest(HttpContext context)
    {
      // throws error now System.MissingMethodException: Method not found?
      this.DoThis(); 
    }

    public void DoThis()
    {
    //
    }
}



껐다가 다시 켜 보았습니까? 제쳐두고 조크를 제쳐두고, 내 컴퓨터를 다시 시작한 것은 실제로 저에게 트릭이었고 다른 답변에서 언급되지 않았습니다.




잘못된 Nuget 패키지 버전

나는 우리 회사의 EF Nuget 데이터 액세스 패키지를 가져 오는 단위 테스트 프로젝트를 가지고 있었고 그 버전은 현재 버전 뒤에있었습니다.

aformentioned 패키지에 대한 Nuget 설정은 두 번째 레벨 종속 패키지 인 다른 패키지에 대해 least version 을 사용하고있었습니다.

따라서 관련 어셈블리에 대해 잘못된 버전자동으로 나타납니다 .

해결책

Nuget에서 패키지를 설정 / 업데이트 하여 최신 문제를 해결합니다.




다만 그것이 누군가를 돕는 경우에, 오래된 문제점 일지라도, 나의 문제는 조금 이상했다.

젠킨스를 사용하는 동안이 오류가 발생했습니다.

결국 시스템 날짜가 미래 날짜로 수동으로 설정되어 dll이 해당 미래 날짜로 컴파일되도록합니다. 날짜가 다시 정상으로 설정되면 MSBuild는 파일이 최신 버전이며 프로젝트를 다시 컴파일 할 필요가 없다고 해석했습니다.




제 경우에는 복사 / 붙여 넣기 문제였습니다. 나는 어떻게 든 나의 맵핑 프로파일을위한 사적 생성자로 끝났다.

using AutoMapper;

namespace Your.Namespace
{
    public class MappingProfile : Profile
    {
        MappingProfile()
        {
            CreateMap<Animal, AnimalDto>();
        }
    }
}

(ctor 앞에 누락 된 "공개"를 기록하십시오)

완벽하게 컴파일 된,하지만 AutoMapper 프로필을 인스턴스화 할 때 (물론!) 생성자를 찾을 수 없습니다!




실제로 많은 추측을 한 MSBuild 프로세스가 백그라운드에서 실행될 때도 똑같은 일이 발생했습니다 (이전 버전의 코드에 대한 참조가있었습니다). 나는 VS를 종료하고 프로세스 탐색기에서 모든 MSBuild 프로세스를 종료 한 다음 다시 컴파일했습니다.




또한 .. 프로젝트 또는 솔루션을 "정리"하고 다시 빌드하십시오!




필자는 작업 공간에서 내 변경 사항을 저장하고 TFS 전동 공구 'scorch'를 실행하여이 문제를 해결했습니다 ( https://visualstudiogallery.msdn.microsoft.com/f017b10c-02b4-4d6d-9845-58a06545627f ). 그런 다음 변경 사항을 취소하고 프로젝트를 다시 컴파일했습니다. 이렇게하면 작업 공간에서 주변에있을 수있는 '매달린 파티'를 정리하고 새로 시작할 것입니다. 물론 TFS를 사용해야합니다.




참조를 확인하십시오!

솔루션 프로젝트 전체에서 동일한 타사 라이브러리 (버전을 신뢰하지 않고 경로를 살펴보십시오)를 지속적으로 가리키고 있는지 확인하십시오.

예를 들어, 한 프로젝트에서 iTextSharp v.1.00.101을 사용하고 NuGet 또는 iTextSharp v1.00.102를 다른 곳에서 참조하면 런타임 오류가 발생하여 코드에 흘러 들어갑니다.

3 개의 프로젝트 모두에서 iTextSharp에 대한 참조를 변경하여 동일한 DLL을 가리키고 모든 것이 작동했습니다.




제 경우에는 spotify.exe가 내 웹 API 프로젝트가 개발 컴퓨터에서 사용하려고했던 것과 동일한 포트를 사용하고있었습니다. 포트 번호는 4381입니다.

나는 Spotify를 그만두고 모든 것이 잘 돌아갔습니다 :)




NuGet 서버로 개발할 경우 어셈블리 버전이 모두 동일한 지 확인하십시오.

[assembly: AssemblyVersion("0.2.6")]
[assembly: AssemblyFileVersion("0.2.6")]
[assembly: AssemblyInformationalVersion("0.2.6")]



Related