방금 기존 프로젝트를 새로운 컴퓨터에 복사하여 개발을 시작했으며 참조 된 어셈블리 중 하나 (텔레 릭 DLL)의 버전에 문제가 발생했습니다.
프로젝트는 원래 이전 버전의 어셈블리를 참조했습니다 (v1.0.0.0이라고 함). 새 컴퓨터에는 최신 버전의 어셈블리가 설치되어 있으므로 업데이트한다고 생각했습니다 (새 버전 v2.0.0.0이라고 함).
이제 문제가 있습니다 : 이전 v1.0.0.0 dll을 프로젝트 폴더에 복사하고 참조로 추가하면 웹 사이트가 문제없이 시작됩니다. 해당 참조를 삭제하고 시스템에서 이전 DLL을 삭제하고 새 버전 (v2.0.0.0)을 추가하면 페이지에 다음 예외가 표시됩니다.
파일 또는 어셈블리 'XXXXXX, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 121fae78165ba3d4'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)
분명히 코드가 오래된 버전을 찾고 있으며 찾을 수 없습니다. 그런데 왜?
해당 버전 번호에 대한 솔루션 폴더를 찾은 후 단일 참조를 찾을 수 없습니다. .csproj 파일의 텍스트를 두 번 확인하고 버전에 최신 버전이 올바르게 표시되고 HintPath가 새 DLL의 경로를 올바르게 표시한다는 것을 알았습니다. 또한 시스템에 이전 DLL을 설치하지 않았기 때문에 GAC에 표시되지 않습니다 (v2.0.0.0은 예상대로).
그런 다음 퓨전 로그 뷰어가 이전 버전을 찾는 이유를 알아 내려고 시도했지만 운이 없었습니다.
Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.
=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
(Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
그것은 오래된 어셈블리를 찾는 것으로 시작한다고 말합니다. 나는 온라인으로 해결책을 찾으려고 노력했지만이 비슷한 SO 질문 을 보았지만 내 문제와 정확히 반대 인 것 같습니다. 해당 질문자의 프로그램이 참조 된 DLL 대신 잘못된 DLL을 찾았습니다. 내 문제는 프로그램이 신비하게 잘못된 DLL을 찾고 bin 폴더와 GAC에서 로컬에서 올바른 DLL을 찾을 수 없으면 찾을 수 없다는 것입니다.
이전 버전을 찾는 이유는 무엇입니까? 이 나쁜 참조를 찾기 위해 다른 곳을 검색 할 수 있습니까?