[.net] 경고 : 동일한 종속 어셈블리의 서로 다른 버전간에 충돌이 있음



Answers

기본적으로 이것은 참조하는 어셈블리에 "로컬 복사"가 "True"로 설정되어있을 때 발생합니다. 즉, DLL 사본이 EXE와 함께 bin 폴더에 저장됩니다.

Visual Studio는 참조 된 어셈블리의 모든 종속성도 복사하므로 참조되는 동일한 어셈블리의 두 가지 빌드로 끝날 수 있습니다. 이것은 프로젝트가 별도의 솔루션에 있고 따라서 개별적으로 컴파일 될 수있는 경우에 발생할 가능성이 큽니다.

그 방법은 어셈블리 프로젝트의 참조에 대해 로컬 복사를 False로 설정하는 것입니다. 완제품을 실행하기 위해 어셈블리가 필요한 실행 파일 / 웹 응용 프로그램에 대해서만 수행하십시오.

희망은 그것이 의미가 있습니다!

Question

저는 현재 20 개의 프로젝트로 구성된 .NET 어플리케이션을 개발 중입니다. 이러한 프로젝트 중 일부는 .NET 3.5를 사용하여 컴파일되고 일부는 여전히 .NET 2.0 프로젝트입니다 (지금까지 아무런 문제가 없음).

문제는 외부 구성 요소를 포함 할 경우 항상 다음과 같은 경고가 표시된다는 것입니다.

"Found conflicts between different versions of the same dependent assembly".

이 경고는 정확히 무엇을 의미하며 (소스 코드 파일에서 #pragma disable을 사용하는 것과 같은)이 경고를 제외 할 가능성이 있습니까?




이것은 나에게도 일어났다. 하나의 dll은 두 번 참조되었습니다. 한 번은 직접 참조 (한 번 참조)하고 한 번 간접적으로 (다른 참조 된 프로젝트가 참조한) 참조되었습니다. 내가 직접 참조, 청소 및 재건 솔루션을 제거했습니다. 문제가 해결되었습니다.




고려해야 할 또 다른 사항은 해당 bin 폴더를 사용하는 서비스가 실행되고 있지 않은지 확인하십시오. 그들이 서비스를 중지하고 솔루션을 다시 작성하는 경우




=> 응용 프로그램의 일부 인스턴스가 부분적으로 설치되어 있는지 확인하십시오.

=> 먼저 제거 응용 프로그램에서 해당 인스턴스를 제거하십시오.

=> 정리하고, 다시 빌드하고, 배포를 시도하십시오.

이게 내 이슈를 해결했습니다. 당신을 도울 수 있습니다. 친애하는.




내 프로젝트 중 하나에 동일한 문제가 있었지만 위의 해결 방법 중 하나도 경고를 해결하는 데 도움이되지 않았습니다. 자세한 빌드 로그 파일을 확인한 후 AsmSpy를 사용하여 영향을받은 솔루션의 각 프로젝트에 올바른 버전을 사용했는지 확인하고 각 프로젝트 파일의 실제 항목을 확인했습니다. 도움이되지 않았습니다.

결국 문제는 하나의 프로젝트에서 내가 가진 참조 중 하나의 중첩 된 종속성이라는 것이 밝혀졌습니다. 이 참조 (A)는 다른 솔루션의 다른 모든 프로젝트에서 직접 참조 된 다른 버전의 (B)를 필요로합니다. 참조 된 프로젝트에서 참조를 업데이트하면 해결됩니다.

Solution A
+--Project A
   +--Reference A (version 1.1.0.0)
   +--Reference B
+--Project B
   +--Reference A (version 1.1.0.0)
   +--Reference B
   +--Reference C
+--Project C
   +--Reference X (this indirectly references Reference A, but with e.g. version 1.1.1.0)

Solution B
+--Project A
   +--Reference A (version 1.1.1.0)

위의 내용이 의미하는 바를 알기를 바라며, 알아 내는데 2 시간 정도 걸렸으므로 다른 누군가에게도 도움이되기를 바랍니다.




이것은 실제로 외부 구성 요소에 따라 다릅니다. .NET 응용 프로그램에서 외부 구성 요소를 참조하면 해당 구성 요소를 식별하는 GUID가 생성됩니다. 이 오류는 프로젝트 중 하나에서 참조하는 외부 구성 요소의 이름이 같지만 다른 어셈블리의 다른 구성 요소와 버전이 다른 경우에 발생합니다.

이는 "찾아보기"를 사용하여 참조를 찾고 잘못된 버전의 어셈블리를 추가하거나 로컬 시스템에 설치 한 것과 다른 버전의 구성 요소가 코드 리포지토리에있는 경우에 때로는 발생합니다.

이러한 충돌이있는 프로젝트를 찾아서 참조 목록에서 구성 요소를 제거한 다음 다시 추가하여 동일한 파일을 가리키고 있는지 확인하십시오.




Visual Studio에서 솔루션Manage nuget 패키지 를 오른쪽 클릭하면 모든 패키지를 같은 버전으로 설정하는 "Consolidate" 탭이 나타납니다.




Links