IT이야기

오래된 DLL 파일이 계속 사용 중입니다.

cyworld 2021. 10. 17. 09:57
반응형

오래된 DLL 파일이 계속 사용 중입니다.


내 프로젝트가 더 이상 존재하지 않는 이전 버전의 DLL 파일을 사용하여 실행되는 임의적인 문제가 있습니다. DLL 파일의 실제 버전이 사용되는 경우도 있고 고대 버전의 DLL 파일이 사용되는 경우도 있습니다. Visual Studio에서 이 DLL 파일을 가져오는 위치를 누가 알 수 있습니까? 몇 달이 지났습니다!

응용 프로그램이 실행될 때 메서드가 존재하지 않거나 구현이 없다고 불평하면서 이상한 'TypeLoadExceptions'가 발생하기 시작하기 때문에 이전 DLL 파일을 사용하고 있다는 것을 알고 있습니다.

다음 작업은 도움이 될 때도 있지만 그렇지 않을 때도 있습니다.

  • Visual Studio 다시 시작
  • 컴퓨터 다시 시작
  • 솔루션 청소 및 재구축
  • \WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files의 모든 항목 삭제
  • \Documents and Settings\username\Local Settings\Temp에서 DLL 파일 인스턴스 검색 및 삭제

때로는 위의 모든 단계를 수행 하지만 여전히 DLL 파일의 이전 복사본을 사용합니다. 어디에 숨겼어?!

MSBuild를 사용하는 TeamCity 서버 에도 동일한 문제가 있습니다 . TeamCity는 단위 테스트를 실행하려고 할 때 이전 DLL 파일을 사용합니다.

이제 web.config파일 에서 어셈블리 리디렉션을 사용할 수 있다는 것을 알고 있지만 DLL 파일의 버전 번호는 변경되지 않았습니다. 이 문제를 해결하기 위해 DLL 파일 버전 관리를 시작하고 싶지 않습니다. 개발을 계속하려면 어떤 특정 캐시를 지워야 하는지 알고 싶습니다.


그것은 GAC 에서 그것을 숨깁니다 . 그곳에서 그것은 무기한으로 존재할 수 있습니다. 최신 버전을 사용하면 실제로 문제가 해결될 수 있지만 Visual Studio에는 올바른 버전의 DLL 파일을 선택하는 것과 관련된 미해결 버그가 있습니다. (만약 DLL 지옥 이 충분히 나쁘지 않다면, Visual Studio 팀은 그것을 더 악화시키고 있습니다!)

GAC에서 찾는 것은 까다로워서 방법에 대해 조언할 수는 없지만, GAC에서 이전 버전을 삭제하면 다시 찾을 수 없습니다. 때로는 컴파일러가 최신 버전(날짜별)을 가리키고 있더라도 동일한 버전 수준(버전별)을 가지고 있기 때문에 이전 버전을 사용합니다. 그것이 버그입니다.


Visual Studio가 이 dll을 어디에서 가져오는지 누가 압니까? 몇 달이 지났습니다!

모듈 창은 당신의 친구입니다 ...

해당 파일이 어디에서 왔는지 정확히 알려줍니다. 디버거를 연결하면 임의의 프로세스와 함께 사용할 수도 있습니다.


빌드 순서나 프로젝트에 문제가 있을 수 있습니다. 테스트 프로젝트가 애플리케이션 프로젝트보다 먼저 빌드된 경우 설명하는 동작이 발생합니다.
이 문제를 해결하려면
VS에서 기본 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 프로젝트 종속성... 옵션을 선택하고 빌드 순서를 확인합니다. 이러한 종속성을 올바르게 설정하여 빌드 하위 시퀀스를 변경할 수 있습니다.


나는 그들이 GAC에 숨어 있다고 생각합니다. 'C:\Windows\assembly'에서 모든 dll을 보고 거기에서 등록을 취소할 수 있습니다.


비슷한 문제가 있었습니다(Visual Studio 제외). UnsafeLoadFrom을 사용하여 .NET dll을 로드하고 있습니다. 한 컴퓨터(터미널 서버)에서는 업데이트된 버전 번호 등에 관계없이 이전 파일이 계속 사용됩니다.

이유는 간단합니다. 이전 dll을 이미 로드한 프로그램 인스턴스가 실행 중인 한 새 dll은 사용되지 않습니다. 이전 버전이 이미 얼마 전에 로드되었기 때문에 더 이상 하드 디스크에 존재하지 않지만 더 이상 모든 UnsafeLoadFrom은 이전 dll이 됩니다.

솔루션은 실행 중인 모든 응용 프로그램 인스턴스를 종료 하거나 컴퓨터를 다시 시작하는 것입니다. 그런 다음 모든 새 인스턴스는 업데이트된 dll을 가져옵니다.


제 경우 에는 다른 구성(다른 DLL 위치 사용)이 있는 릴리스 모드 로 전환되었습니다 .


제 경우에는 Visual Studio를 사용하여 웹 사이트를 게시하고 확인했지만 dll 파일의 참조가 변경되었지만 게시된 dll은 여전히 ​​오래되었습니다. 마지막으로 를 새로 Publish Web Profile만들고 올바른 구성(예: Debug - x86 / Release - Any CPU)을 선택하고 다시 게시하면 dll이 수정됩니다.


이 질문은 오래되었지만 누군가가 해결책을 찾는 과정에서 다시 우연히 발견할 수도 있습니다. 제 경우에는 ASP.Net 페이지에 대해 CS0433 오류가 발생했습니다. 프로젝트의 obj\ 및 bin\ 폴더에 있는 내용을 삭제한 후 다시 작동했습니다. 아마도 닫힌 Visual Studio로 수행해야 할 것입니다. 동일한 솔루션에서 참조된 프로젝트의 해당 폴더를 정리할 수도 있습니다(프로젝트에서 사용하고 Nuget을 통해 가져오지 않은 경우).


DLL이 다른 폴더에서 참조되고 있을 수 있습니다. PATH 환경 변수에 하나가 있는 경우 네트워크 드라이브에 있을 수도 있습니다. Windows가 DLL을 검색하는 방법은 다음과 같습니다. http://msdn.microsoft.com/en-us/library/7d83bc18%28v=vs.80%29.aspx


내 Visual Studio 2015에서 문제가 되는 Visual Studio 프로젝트의 참조 경로 목록이 비어 있는지 확인했습니다.

여기에 이미지 설명 입력


이러한 문제를 발견하면 참조 dll 및 pdb 확장 파일을 삭제하고 새 참조를 추가하고 프로젝트를 다시 빌드하십시오. 이는 종종 프로젝트, 커밋 및 업데이트를 다시 빌드하지 않기 때문에 발생합니다.


제 경우에는 이전 DLL이

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL\MyDLL.dll

에 나타나지 않았습니다 c:\Windows\assembly.

I did a search of my drive for MyDLL, and it showed up as indicated above. I was debugging my test app at the time, and tried to delete the offending folder...no go...it was locked by Visual Studio. I had to stop debugging my app, close Visual Studio, and then delete the folder. Problem solved!! I don't know how my DLL got there, but it hasn't showed up there since I deleted it.


The fix for me was making sure that the virtual directory in IIS was pointing to the correct directory. I have two projects on my system, a v4 and a v5. The virtual directory on my dev system was pointing to the v4 bin directory instead of my v5 bin directory - oops!


dll에 캐쉬중이던 파일이 추적이 안되서 파일명을 바꾸게 되었습니다. 이것은 여기에 언급된 문제를 해결하지 못할 수도 있지만 이것은 이 질문과 관련하여 저에게 도움이 된 수정 사항이었습니다.


VS 2107 재설치를 포함하여 많은 것을 시도했습니다. 출력 창에서 DLL 파일이 로드되는 위치를 볼 수 있습니다. 프로젝트 DLL을 찾는 모든 광산을 거친 후 찾았습니다.

이것을 지우면 저에게 효과적이었습니다.

C:\Users\YourUser\AppData\Local\assembly\dl3\222Q4G1T.8AT\JBEAR7PB.E3J\8bfcf9ab\6e61cbd5_30acd401\YourDLL.dll'

실제로 다음의 모든 파일을 삭제했습니다.

C:\Users\YourUser\AppData\Local\assembly\

ReferenceURL : https://stackoverflow.com/questions/5575253/old-dll-file-keeps-being-used

반응형