2012-11-13 4 views
2

어셈블리 XXXXX에 대한 참조가있는 프로젝트에서 일부 dll 파일을 사용해야합니다. 내 프로젝트에서이 어셈블리의 최신 버전을 가지고 있지만 프로젝트를 실행할 때 오류가 발생합니다. Could not load file or assembly XXXXX, Version=XXXXX. 이 문제는 MSDN article Redirecting Assembly Versions을 사용하여 해결하려고했습니다. 그러나 도움이되지 않습니다. 다른 공개 토큰 키가 있기 때문에 어셈블리 리디렉션이 작동하지 않는 것 같습니다. 구 어셈블리에서는 null입니다. 그러나 새로운 어셈블리에는 "xxxxxxxxxxx"라는 값이 있습니다. 이 문제가 어떻게 해결 될 수 있습니까?다른 publicKeyToken을 가진 .Net dll을 업그레이드하십시오.

P. 비슷한 질문은 here입니다. 하지만 다른 점은 내가 다른 공개 토큰 키를 가지고 있다는 점입니다.

답변

0

새 버전의 XXXXX에 대해 사용중인 dll 파일의 새 버전을 가져와야합니다.

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx에서 어셈블리 조회에 대해 자세히 알아볼 수 있습니다.

+0

새 참조가있는이 DLL의 새 버전을 사용할 수 없습니다. – Anton

+1

그럼 운이 없네요. http://blogs.msdn.com/b/thottams/archive/2007/02/01에서 설명한대로 ildasm 및 ilasm을 사용하여 새 버전을 참조하는 XXXXX에 대한 구식 참조를 사용하여 자신의 어셈블리 버전을 빌드 할 수 있습니다. /using-ilasm-and-ildasm.aspx. 그러나 이것은 상당히 낮은 수준의 작업입니다. 다시 작성해야하는 어셈블리에는 서명되지 않은 XXXXXX 서명되지 않은 버전에 대한 참조가 있으므로이 어셈블리가 서명되지 않았다고 가정합니다. – fsimonazzi

+0

두 버전의 XXXXX 어셈블리를 모두 사용할 수 있습니까? – fsimonazzi

0

공유 dll의 공개 키는 "man/dll-in-the-middle"공격으로부터 앱을 보호해야합니다.

dot net 런타임은 현재 sub.dll에 main.exe를 컴파일 할 때 사용한 것과 동일한 공개 키가 없으면 sub.dll을 사용하여 main.exe를 시작하는 것을 올바르게 거부합니다.

이 문제를 해결하기 위해 할 수 있습니다 sub.dll의 두 버전이 동일한 공개 키를 사용하여 컴파일 된 새로운 sub.dll
  • 메이크업의 SHURE와

    • 재 컴파일 메인 .exe. 귀하의 경우 이전 sub.dll에 키가 없기 때문에 sub.dll (공개 키 : ilmerge 사용)에서 공개 키를 삭제할 수 있습니다.
  • +0

    1) 다시 컴파일 할 수 없으며 dll 파일에서 2 가지 다른 참조를 사용하지 않아도됩니다. 일부 dll의 다른 버전을 참조하는 두 번째 타사 dll 파일이 있습니다. 2) sub.dll에서 공용 키를 제거하면 "파일 또는 어셈블리 'XXXXX'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다 (HRESULT 예외 : 0x80131040) " – Anton

    관련 문제