2012-07-15 1 views
15

나는 산발적으로 다음과 같은 오류가 발생합니다 웹 사이트있어 : 이제DLL 버전 오류

Server Error in '/' Application.

Could not load file or assembly 'ICSharpCode.SharpZipLib, Version=0.85.3.365, Culture=neutral, PublicKeyToken=1b03e6acf1164f73' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

내가이 DLL에 대한 종속성을 할 것을 알고,하지만 난 내 시스템에 버전 0.85.5이 . 내가 이전 버전의 DLL을 서버에서 체계적으로 삭제하고 모든 것을 다시 컴파일 한 후 다시 게시했습니다. 그러나 내가하는 일과 상관없이 누군가가 사이트를 방문한 첫 번째 또는 두 번이나 다시 게시 할 때마다이 오류가 발생하는 것으로 보입니다. 그런 다음 한 두 번 새로 고침 후 오류가 사라지고 사이트가 정상적으로 작동합니다.

무엇을 만들어 그것을 더 이상 내가 오류가 발생합니다 코드 줄을 보면 다음과 같습니다

URLRewriter.ProcessRewritingResult(status, excludedEnum, siteName, viewMode, relativePath); 

URLRewriter는 제 3 자 패키지에서 클래스 (Kentico CMS - CMS.URLRewritingEngine.dll) . 그 DLL에 Dependency Walker를 실행 시켰고 ICSharpCode.SharpZipLib에 어떤 의존성도 발견하지 못했습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

편집 : @ JeremyThompson의 제안에 따라 프로세스 모니터를 실행하여 오류를 잡았습니다. 여기에는 화면 덤프가 있으며, 관련 부분이 강조 표시되어 있습니다 (개인 정보 보호를 이유로 한 폴더 이름이 가려져 있음). 여기에 오류에서로드 추적 : 당신은

편집

enter image description here

등 ... 거기에 마우스 오른쪽 버튼으로 클릭에 의해 그것을 전체 화면을 볼 수 있습니다. 이게 도움이 되나요?

=== Pre-bind state information ===

LOG: User = MY-SERVER-12\Administrator

LOG: DisplayName = ICSharpCode.SharpZipLib, Version=0.85.3.365, Culture=neutral, PublicKeyToken=1b03e6acf1164f73 (Fully-specified)

LOG: Appbase = file:///C:/inetpub/wwwroot/MySite/

LOG: Initial PrivatePath = C:\inetpub\wwwroot\MySite\bin

Calling assembly : CMS.WebAnalytics, Version=6.0.4377.2467, Culture=neutral, PublicKeyToken=834b12a258f213f9.

===

LOG: This bind starts in default load context.

LOG: Using application configuration file: C:\inetpub\wwwroot\MySite\web.config

LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config

LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.

LOG: Post-policy reference: ICSharpCode.SharpZipLib, Version=0.85.3.365, Culture=neutral, PublicKeyToken=1b03e6acf1164f73

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib.DLL.

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.DLL.

LOG: Attempting download of new URL file:///C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib.DLL.

LOG: Attempting download of new URL file:///C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.DLL.

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib.EXE.

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.EXE.

LOG: Attempting download of new URL file:///C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib.EXE.

LOG: Attempting download of new URL file:///C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.EXE.

+0

안녕 Shual

이 그냥 Kentico 팀 핑, 내가 과거에 그들과 함께 처리 한 그들은 최고 인디언이다. 나는 그들이 공공 포럼에서 지금 이것을 볼 것임을 확신한다. 이 사람 : @ PetrPalas (http://stackoverflow.com/users/1430236/petr-palas), 그는 정말 좋다. –

답변

6

Now I know that I do have a dependency on this DLL, but I have version 0.85.5 on my system. I have systematically deleted every older version of the DLL from the server, recompiled everything and republished.

는 DLL의 OLDER 버전을 기대하는 '의존성'같은 소리. 왜 OLDER 버전 (0.85.3.365)와 시스템의 더 새로운 버전 (0.85.5)의 모든 사본을, REPLACE? (웹 응용 프로그램의 '빈'폴더와 'GAC'모두를 확인해야합니다 : C : \ WINDOWS \ 어셈블리)

당신이 필요로하는 경우, 당신은 여기에 이전 버전을 다운로드 할 수 있습니다 http://sourceforge.net/projects/sharpdevelop/files/SharpZipLib/0.85.3/

주 :

  • DLL을 바꾼 후 IIS를 중지하고 모든 임시 ASP.Net 파일을 지우십시오. 예컨대 : C : \ \ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 임시 ASP.NET 파일
  • ALSO : 당신의 비주얼 스튜디오 솔루션 있도록 참조 이전 버전을 업데이트해야합니다.

건배 피트

+0

글쎄, 나도 알다시피, 나는 DLL의 최신 버전에 아무것도 필요 없어, 그래서이 솔루션은 실제로 나를 위해 작동합니다. 이것은 지적 관점에서 볼 때 매우 만족스럽지 않은 해결책이지만, 트릭을 사용하므로 크레딧과 현상금에 답변을드립니다. 감사! –

4

사용자가 처음으로 사이트를 방문한 횟수는 오류가 발생하는 한 두 차례입니다.

문제를 해결하려면 Process Monitor을 실행하고 어셈블리를 찾고로드 할 위치를 확인하는 것이 좋습니다. 서버

-iisreset
-start 프로세스 모니터
-보기 페이지의 커플 ICSharpCode.SharpZipLib

을 위해 빨리 프로세스 모니터 추적에서 ProcessMonitor 추적
- 검색 -stop 수
등의 문제를 재현

이 실패하면 원인이었던 그 밖의 무엇 참조 : CSV
E에서 CSV - 오픈 과 ProcessMonitor 결과 - 저장

이 문제는 오류가 무엇인지 알려 주어야

Could not load file or assembly

+0

조언 해 주셔서 감사합니다. 나는 실제로 IIS Worker Process (w3wp.exe)가 레지스트리와 파일 시스템 모두에서 v0.85.3의 DLL을 찾고 "NAME NOT FOUND"또는 "PATH NOT FOUND"를 얻음을 발견합니다. 몇 백 마이크로 초 후에 DLL의 버전 0.85.5를 찾습니다. 그게 우리에게 무엇을 말합니까? –

+1

사실, 내 웹 사이트의 bin 폴더에서 "파일 만들기"를 성공적으로 수행하기 전에 GAC에서 "파일 만들기"를 시도한 다음 .NET 임시 파일 폴더에서 시도하는 것으로 나타났습니다. 왜 "파일 읽기"가 아닌 "파일 만들기"입니까? –

4

그래서 알고 보니 모든 열 액세스 거부와 열의 드롭 다운 목록 -choose
또는 ... -Filter XCEL
Kentico는 ICSharpCode.SharpZipZip.dll에 의존하고 있으며 이전 버전을 기대합니다. 비슷한 해결책을 찾았습니다 here. 다음 web.config 파일에 다음 블록을 삽입하면이 오류가 마지막으로 추측 된 것 같습니다!

<runtime> 
    <assemblyBinding> 
    <dependentAssembly> 
     <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73"/> 
     <bindingRedirect oldVersion="0.85.3.365" newVersion="0.85.5.452"/> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

아직도 이해할 수없는 것은 왜 종속성 트래커가이 종속성을 표시하지 않았습니까?

편집 : 오, 이런, 결국 해결하지 못했습니다. 지금은 덜 자주 발생하지만 IIS를 다시 시작한 후 테스터 중 한 명이 이전 오류 메시지를 다시 받았습니다! :-(

+1

이것은 바인딩 리다이렉트 => 0에서 .85.5.452까지 (이것은 .85.3.365 ... 85.5.452를 사용하는 것을 의미합니다. 예 :'' –

0

/무엇을 조립 하중을 명시 적으로 설정로드 위치.

+0

어떻게? 코드 샘플을 알려주십시오. –

+0

http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx – user626528

+1

또는 어셈블리 바인딩 로그 뷰어 (Fuslogvw.exe)를 사용하여 어셈블리가 프로브되는 방식을 확인하십시오. http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.71).aspx ---- 보고 ---- http://stackoverflow.com/questions/255669/how-to-enable-assembly-bind-failure-logging-fusion-in-net –

0

이 같은 응용 프로그램 풀에 정의 된 Kentico CMS와 응용 프로그램 때 당신이 볼 수 있도록, AppDomain.CurrentDomain.AssemblyResolve에 부착하려고? 시도

작업자 프로세스가 재활용 될 때가 있습니다. 때로는 응용 프로그램이 처음 추가되는 경우도 있으며, 때로는 Kentico CMS가 처음 추가되는 경우도 있습니다. ICSharpCode.SharpZipLib가 해결되는 방식

우연히 한 번 또는 두 번 우연히 응용 프로그램이로드 됨으로써 상쾌하게됩니다.

What is Application Pool in IIS and Asp.Net?

업데이트 : 응용 프로그램 웹 사이트 (처음 액세스 컴파일), 또는 (Visual Studio에서 미리 컴파일 된) 웹 프로젝트입니다. 그것이 웹 사이트라면 웹 프로젝트로 변환하여 시도해 볼 수 있습니까?

+0

그들은 모두 동일한 웹 사이트에서 배포되므로 동일한 응용 프로그램 풀을 사용하고 있는지 확인하십시오. :) –

1

난 당신이 바인딩 리디렉션에 바른 길에 있었다 생각합니다. 그러나, 이전 버전에 대한 귀하의 응용 프로그램을 바인딩하는 대신, 새로운 버전에 종속 어셈블리를 바인딩하려고 시도하자.

일반적으로 이전 버전을 강요하는 것은 나쁜 결정을 고칠 수는 있지만 최신 버전에 의존하는 코드에 호환성 오류를 삽입 할 수 있기 때문에 더 나쁜 선택입니다.

+0

이해가 안됩니다 ... 저는 새 버전과의 바인딩입니다 ...? 아니면 내 코드에 뭔가 섞여 있었습니까? –