2011-01-10 15 views
12

Paypal 통합과 함께 ASP/C# 응용 프로그램의 오류를 살펴야합니다. 전체에 표시된 오류는 다음과 같습니다파일 또는 어셈블리 log4net 또는 해당 종속성 중 하나를로드 할 수 없습니다.

파일 또는 어셈블리 로드 할 수 없습니다 'log4net을, 버전 = 1.2.0.30714, 중립 문화 = PublicKeyToken = b32731d11ce58905'종속성 또는 하나. 위치한 어셈블리의 매니페스트 정의는 이 어셈블리 참조와 일치하지 않습니다. (HRESULT에서 예외 : 0x80131040) 내가 이해에서

,이있는 실제 파일 (즉, 내 bin 디렉토리에 log4net.dll가) 일부 조립 구성에 따라 예상되는 버전과 일치하지 않음을 의미한다. 내가 가지고있는 문제는이 파일이 참조되는 위치를 찾을 수 없다는 것입니다.

사이트의 웹 루트 디렉토리에있는 모든 파일에 액세스 할 수 있으며이 DLL을 참조하는 구성 파일을 찾을 수 없습니다. 무엇이 잘못 찾았는지 확인하기 위해 내가 볼 필요가있는 부분은 무엇입니까?

참고로 bin 디렉토리에있는 DLL의 버전이 최신인지 확인했지만 아무 것도 해결하지 못했습니다.

답변

9

프로젝트에서 참조를 제어해야합니다. 참조는 어셈블리 자체로 컴파일되어로드를 시도합니다. 내 생각 엔 log4net 어셈블리에 대한 구식 참조가 있지만 최신 버전을 사용하고있는 것입니다.

+0

그건 의미가 있습니다. 프로젝트에서 어떤 참조가 만들어지고 있는지를 볼 수있는 방법이 있습니까? 컴파일 된 프로젝트를 볼 때 어떤 파일이 일반적으로 위치합니까? – Elie

+0

컴파일 된 프로젝트를 보지 말고 컴파일되지 않은 프로젝트 (csproj 파일)를보아야합니다. 그렇지 않으면, (마크의 게시물에) depends.exe가 도움이 될 것이라고 생각합니다. – Femaref

+0

이것은 너겟 패키지에서도 확인할 수 있습니다. 프로젝트 중 하나에서 log4net 버전 1.2.3을 참조하는 경우.4와 다른 프로젝트가 log4net 버전 5.6.7.8을 찾으면이 오류가 발생합니다. (또는 다른 모든 너겟 패키지). 그냥 그 버전과 일치하고, 당신은 좋은거야. – Krishna

1

특정 오류에 대한 유용한 정보가 없습니다. 그러나 이러한 유형의 문제를 해결하는 데 도움이되는 몇 가지 유용한 유틸리티는 Dependency Walker.NET Reflector입니다.

log4net 어셈블리에서 사용되는 예기치 않은 모듈이 있는지 확인하기 위해 종속성 검사기를 사용할 수 있습니다. Reflector 유틸리티는 어셈블리 (버전, 참조 된 어셈블리, 분해 된 코드는 물론)에 대한 유용한 정보를 제공합니다.

2

아마도 log4net의 최신 버전을 가지고 있지만 이전 버전을 참조하는 프로젝트가있을 것입니다. 당신이 특정 버전을 알 수없는 경우 http://msdn.microsoft.com/en-us/library/eftw1fys.aspx

리디렉션을 수행 할 수 있습니다 : 당신은 당신은 여기에 대한 자세한 정보를 찾을 수 있습니다

<bindingRedirect>

사용하여 새 버전을 참조하는 이전 버전을 참조하는 모든 어셈블리를 강제 할 수 또한 특정 버전의 버전을 사용하고 특정 버전을 가리 키도록하십시오.

1

또한이 문제가 발생하여 프로젝트가 GAC에서 log4net을 당겨서 GAC의 버전이 참조 된 버전과 일치하지 않을 가능성이 있습니다 귀하의 프로젝트에서

14

우리는 VS 2010 및 .NET 4.0으로 이동했을 때도 log4net을 전혀 사용하지 않지만 우리가 사용하는 다른 것으로 의심됩니다 (Crystal Reports 일 가능성이 있습니다). IIS의 응용 프로그램 풀에 대한 고급 설정에서 "32 비트 응용 프로그램 사용"옵션을 "True"로 변경하면 모든 것이 다시 작동하므로 32 비트 DLL 인 dll도 사용합니다.

+0

그래, 내게있어 Crystal Reports 때문일거야. – basher

+0

재미 있습니다. 내 솔루션도 전혀 사용하지 않는 참조를 요구하는 일이 나에게도 일어났다. VS2017을 다시 시작한 "해결 된"솔루션입니다. 그리고 이전에로드 된 프로젝트가 log4net을 사용한다는 것을 정확히 알고 있습니다. 그러나 현재는 전혀 없습니다. 그들은 임시 파일이나 웃음을 공유하고 충돌이 있다고합니다. – Saulius

4

웹 응용 프로그램에서도 비슷한 문제가있었습니다. 우리는 고대 .NET 1.1 32 비트에서 .NET 4.0 64 비트로 이동했습니다.

나는 우리의 사용자 제어 우리의 하나에 수신 된 오류는 다음

ASP.NET runtime error: Could not load file or assembly 'log4net' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

여기 내 생각 엔 우리가 64 비트에서 DLL을 컴파일하고 있지만 32 비트 DLL을 참조하는 것입니다 ? Matt Palmerlee가 위에서 말한 것과 동의합니다 - 응용 프로그램 풀을 32 비트 모드로 전환해도 문제는 해결되지만 여전히 32 비트 응용 프로그램 풀에 고정되어 있습니다. 64 비트가 IIS 응용 프로그램 풀을 제공하는 추가 메모리를 활용하고 싶었습니다.

궁극적으로, 제 3 자 DLL 중 실제로 log4net을 참조하는 DLL을 파악할 수 없었습니다. log4net.dll이 "bin"디렉토리에 복사되고 오른쪽 클릭을하면 Apache Foundation과 관련되었음을 알게되었습니다. - http://logging.apache.org/log4net/

나는 최신 log4net.dll . NET 4, 내 웹 응용 프로그램 프로젝트에 대한 참조로 추가, 재 컴파일 및 사용자 정의 컨트롤을 다시 열면 오류가 사라졌습니다.

log4net download

희망이

+0

나는 똑같은 문제가 있었다. GAC에서 log4net을 참조하고 있었다. 당신의 의견은 그것을 고칠 수 있었다. .. 고마워. – Munawar

0

내가 IIS의 응용 프로그램 풀 설정에서 32 비트 응용 프로그램을 사용하는 매트의 조언을 따르려고하는 데 도움이됩니다.

밝혀졌습니다. 나는 멀리까지 갈 필요조차 없었습니다. 카시니에서 IIS로 전환하자마자 해결했습니다.

는 IIS로 전환하려면 :

  1. 윈도우 프로그램 및 기능에서 IIS를 (또한 "ASP.NET의 XX"IIS에서 노드> 월드 와이드 웹 서비스> 응용 프로그램 개발 기능을 활성화해야합니다)
  2. 사용 속성> 웹> 로컬 IIS 웹 서버 사용> 가상 디렉터리 만들기 (이렇게하려면 VS를 관리자로 실행해야 함) 이 후 나를 위해

없음 log4net 오류를 실행

  • 빌드 프로젝트>.

    어디서나 log4net을 사용하지 않아서 왜 내가 그것을 얻었는지 알 수 없지만 그것이 없어 졌기 때문에 기쁩니다.

  • 2

    여기 같은 오류가 있습니다. 다음은 수정 된 방법입니다. Apache에서 최신 .Net 4.0 log4net.dll을 다운로드하고 bin 폴더의 버전을 교체하면 저에게 효과적이었습니다. 프로젝트에 대한 참조를 영구적으로 추가해야합니다. 링크는 다음과 같습니다. Apache

    다운로드, 바이너리로 이동하여 새 키 버전을 선택하십시오. 다운로드가 완료되면 .Net 4.0 폴더로 이동하여 .dll 파일을 찾습니다.

    0

    이러한 대답을 읽은 후에는 .csproj를 검사하고 섹션의 'Lib \ log4net.dll'에 대한 실제 참조를 찾습니다. 나는 이것을 삭제하고 프로젝트를 컴파일했다.

    관련 문제