[.net] 오류 CS1705 : “참조 된 어셈블리보다 높은 버전이 있습니다.”

나는 이것을 잠시 조사해 왔지만 해결되지 않았습니다. 다음과 같은 오류 메시지가 나타납니다.

Compiler Error Message: CS1705: Assembly 'My.Model, Version=1.1.4422.23773, Culture=neutral,
PublicKeyToken=bfde95ba233094b2' uses
'Common, Version=3.3.4273.24368, Culture=neutral, PublicKeyToken=bfde95ba233094b2'
which has a higher version than referenced assembly
'Common, Version=3.3.4269.17112, Culture=neutral, PublicKeyToken=bfde95ba233094b2'

c:\WINDOWS\assembly\GAC_MSIL\Common\3.3.4269.17112__bfde95ba233094b2\Common.dll:
(Location of symbol related to previous error)

웹 서버에서 Server 2003을 실행하고 있습니다. c : \ windows \ assembly로 이동하여 실제로 Common.dll의 3 가지 버전이 나열되어 있음을 확인했습니다. 나열된 가장 높은 버전은 3.3.4269.17112입니다.

버전이 3.3.4273.24368 인 dll을 어셈블리 디렉터리에 복사했습니다. 그런 다음 코드를 재 컴파일하고 재배포했습니다 (아마도 과도하지만 오 잘). 새 세션에서 브라우저를 열고 사이트 URL로 다시 이동했을 때 여전히 동일한 메시지가 나타납니다.

Windows 탐색기를 사용하여 더 높은 버전의 Common.dll이 목록에 있는지 확인할 수 있습니다.

이 문제를 해결하기 위해 무엇을 더 조사 할 수 있습니까? 이전 버전을 가리 키도록 어셈블리의 참조를 변경하고 싶지 않습니다.



답변

시도해 볼 수있는 3 가지 아이디어 :

  1. 모든 dll이 동일한 버전의 Common에 대해 컴파일되었는지 확인하십시오.
  2. 솔루션에 파일 참조 대신 프로젝트 참조가 있는지 확인하십시오.
  3. web.config에서 바인딩 리디렉션 을 사용 합니다. ( 웨이 백 머신에서 원래 링크 된 버전 )

답변

“재 구축”이 실제로 재 구축되지 않았기 때문에이 오류가 발생했습니다.

해결책 : Visual Studio를 닫고 실제로 bin 폴더를 삭제 한 다음 다시 빌드하면 더 잘 작동 할 수 있습니다.

또한 때로는 Visual Studio가 참조에 대해 속하므로 파일 HintPath에서 확인하십시오 .csproj.


답변

NuGet을 사용하는 경우 ‘Manage NuGet Packages For Solution’ 으로 이동하여 문제를 일으키는 패키지를 찾고 업데이트를 누르는 것이 좋습니다. 그런 다음 모든 패키지를 최신 버전으로 가져와 문제를 해결해야합니다.

빠르고 쉽습니다.


답변

내 문제는 다른 버전을 가진 동일한 dll의 2 개의 다른 사본을 참조하는 2 개의 프로젝트가 있다는 것입니다. 둘 다 제거하고 동일한 dll 파일을 참조하는지 확인하여 수정했습니다.


답변

한 가지 가능한 원인은 두 번째 어셈블리가 GAC에 설치되고 더 높은 버전 번호를 가진 첫 번째 어셈블리가 프로젝트의 참조에 추가되기 때문입니다. 이를 확인하려면 프로젝트 참조에서 어셈블리를 두 번 클릭하고 개체 브라우저에 같은 이름의 다른 어셈블리가 있는지 확인합니다.

이 경우 gacutil.exe 유틸리티를 사용하여 GAC에서 두 번째 어셈블리를 제거합니다. 예를 들어 64 비트 어셈블리 인 경우 :

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name>


답변

참조로 이동하여 문제를 일으키는 dll 파일의 새 참조를 추가하고 모든 dll이 동일한 버전에 대해 컴파일되었는지 확인하십시오. 저에게도 효과가 있습니다. 여러분에게도 효과가 있기를 바랍니다.


답변

우리 팀은 빌드 환경에서이 문제에 직면했습니다. 이 문제는 .csproj 파일의 <HintPath> 요소의 차이로 인해 발생했습니다.

우리의 공통 어셈블리에는 참조 어셈블리가 포함 된 디렉터리에 대한 올바른 상대 경로가 있습니다. 종속 어셈블리에는 이전 디렉터리 구조의 경로가 있습니다. GAC가 C : \ Program Files에 설치된 올바른 버전에 대한 종속 참조를 확인함에 따라 솔루션은 dev 컴퓨터에서 성공적으로 컴파일되었습니다. 빌드 환경에는 어셈블리의 레거시 설치가 있었지만 (아무것도 없었어야했지만) 폴백되어 오류가 발생했습니다. 텍스트 편집기에서 <HintPath>를 업데이트하면 문제가 해결되었습니다.