오류 CS1705 : "참조 된 어셈블리보다 높은 버전이 있습니다."


109

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

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이 목록에 있는지 확인할 수 있습니다.

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


2
미친 *.*버전 번호. 모든 것을 재건하십시오.
Hans Passant 2012

답변:



68

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

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

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


2
이것은 내 베이컨을 구했습니다. 로컬 실행은 괜찮 았지만 변경 사항을 게시했고 상황이 이상했습니다. 온라인 bin 폴더의 내용을 삭제하면 항목이 다시 동기화됩니다. 감사!
pStan

40

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

빠르고 쉽습니다.


2
이것은 나를 위해 해결되었습니다. 감사합니다. 하지만 제 상황은 약간 달랐습니다. 업데이트에 나열되지 않았기 때문에 설치로 이동해야했고 프로젝트 별 패키지 버전을 보여주는 창이있었습니다. 일부 오래된 모듈을 새 버전의 cms로 업그레이드하고 있었기 때문에 문제가있는 패키지로 이동하여 선택하고 설치를 클릭해야했습니다. cms가 방금 너겟을 사용하도록 변경 되었기 때문일 수 있지만 지루한 csproj편집을 많이 절약했습니다 !
rtpHarry

3
프로젝트 수준 대신 솔루션 수준에서 NuGet 패키지를 업데이트해야합니다.
Jess

2
이것은 확실히 받아 들여지는 대답이어야합니다. 나는 이것을 읽지 않았지만 의도하지 않게 내 솔루션을 시도했습니다. 매력처럼 작동했습니다.
baymax

30

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


13

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

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

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

2 년 후 당신의 제안은 매력적이었습니다. 개체 브라우저에서 참조를보고 정렬했습니다.
ceebreenk

3

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


2

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

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


2

솔루션 내의 여러 프로젝트에서 너겟 패키지가 다른 경우 문제가 나타납니다.

솔루션의 모든 프로젝트와 함께 너겟 패키지를 공통 버전 으로 업데이트 하여이 문제를 해결할 수 있습니다.


1

비슷한 문제가있었습니다. 내 문제는 각각 특정 버전의 DLL을 참조하지만 다른 버전을 참조하는 동일한 솔루션 내에 여러 프로젝트가 있다는 것입니다. 해결책은 모든 참조의 모든 속성에서 '특정 버전'을 false로 설정하는 것이 었습니다.


1

위의 단계 중 일부를 시도한 후 꽤 오래 전에 요청 된 것으로 알고 있습니다. 저에게 도움이 된 것은 다음 단계 와이 기사 였습니다.

참조를 찾고 PublicKeyToken을 참조되는 항목에서 이전 항목으로 변경했습니다.

이것이 도움이되기를 바랍니다.



0

수제 DLL의 수집 폴더
당신이 솔루션은 다른 라이브러리의 DLL-파일에 대한 쓰레기 폴더가있는 경우
lib, source, libs, 등
당신은 Visual Studio에서 당신의 (a 전나무 시간) 솔루션을 열 것입니다 경우이 문제를 얻을 수 있습니다. 그리고 dll의 수집 폴더가 어떻게 든 누락되었거나 구체적인 dll 파일이 누락되었습니다.

Visual Studio는 자동으로 dll의 참조를 자체적으로 대체하려고 시도합니다. VS가 성공하면 로컬 솔루션에 대한 새 참조가 지속됩니다. 다른 클론 / 체크 아웃에는 해당되지 않습니다.

즉, <HintPath>무시되고 프로젝트 파일 (.csproj)은 변경되지 않습니다.
나의 예로서

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\DocumentFormat.OpenXml.dll</HintPath>
</Reference>

은 폴더 에서 DocumentFormat.OpenXml참조 C:\Program Files (x86)\Open XML SDK\V2.5\lib되지 않습니다 solution\..\lib.

빠른 해결 방법

  • dll의 수집 폴더 확인 및 복원
  • 솔루션 탐색기에서 프로젝트를 언로드 한 다음 프로젝트다시로드 합니다.

올바른 해결 방법 은 NuGet 패키지 관리자로 마이그레이션하는 것입니다.


0

SharePoint의 경우 루트 폴더 아래에 DLL이있는 "bin"폴더가 없는지 확인하십시오. 그렇다면 삭제하십시오. (그리고 VS에서 "로컬 복사"를 거짓으로 변경).


0

웹 사이트 프로젝트의 참조는 web.config 파일에 저장됩니다. 오류를 수정하려면 참조를 업데이트하세요.

web.config 파일의 참조를 잊어 버렸다는 사실을 깨닫기 전에 솔루션의 모든 참조를 살펴 보았습니다.


0

MainProject에서 "System.Web.Mvc, Version = 3.0.0.0"을 사용하고 UnitTestingProject에서 "System.Web.Mvc, Version = 3.0.0.1"을 사용하는 동일한 문제가 UnitTestingProject에서 발생했습니다.

다음을 변경하십시오. <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.50813.1\lib\net40\System.Web.Mvc.dll</HintPath> </Reference>


0

우리 사이트에 Episerver Find를 추가하고 Episerver Find에 해당하는 NuGet 패키지를 설치 한 후 이것을 얻었습니다.

수정은 쉬웠습니다. 모든 Episerver 관련 추가 기능도 업데이트합니다 (CMS, CMS.TinyMCE, CMS.UI 등 관련없는 것으로 보이지만).

가능한 모든 Episerver 애드온을 업데이트하고 다시 컴파일 한 후 오류가 사라졌습니다.


0

내 시나리오에서는 dotnetCore 앱의 .csproj 파일을 편집했습니다. 나는 것으로 나타났습니다 TargetFramework의 태그의 값을 가지고 netcoreapp2.1RuntimeFrameworkVersion의 태그의 값 2.0.0 . 그래서 RuntimeFrameworkVersion2.1.0으로 변경하고 저장하고 VS를 다시 시작하고 다시 빌드 한 다음 오류를 해결했습니다.

이것이 당신을 도울 수 있기를 바랍니다 ...

행운을 빕니다,

Sugeshan


-1

프로젝트에서 System.Web.Mvc 참조를 찾아 버전을 확인하십시오.

그 후 참조-> 어셈블리 를 마우스 오른쪽 버튼으로 클릭 하고 system.web.mvc를 검색하고 설정 하십시오.

이 문제로 인해 이러한 어셈블리 의 다른 버전이 발생합니다 .

편집 : NuGet 패키지 관리를 선택하고 업데이트를 설치합니다 (여러 프로젝트가 업데이트를 설치하는 경우).

중요한 업데이트는 Microsoft.AspNet.MvcMicrosoft.Net.Compilers입니다 .


-1

우리 팀에서는 git을 사용하여 다른 컴퓨터에서 작업했습니다. 누군가 a를 업데이트 dll했지만 나는 그것을 가지고 있지 않았습니다. 방금 종속성 참조를 업데이트하고 문제가 해결되었습니다.


-3

비슷한 문제가 발생했습니다. 다른 DLL, 즉 B.dll을 참조하는 DLL, 즉 A.dll을 만들었습니다.

응용 프로그램 C.exe를 만들고 DLL A.dll 및 B.dll을 참조했습니다.

솔루션-c.exe에서 B.dll 참조를 제거하면 문제를 해결할 수있었습니다.

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.