[.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을 사용하는 것과 같은)이 경고를 제외 할 가능성이 있습니까?




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

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

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

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




내 프로젝트 중 하나에 동일한 문제가 있었지만 위의 해결 방법 중 하나도 경고를 해결하는 데 도움이되지 않았습니다. 자세한 빌드 로그 파일을 확인한 후 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 시간 정도 걸렸으므로 다른 누군가에게도 도움이되기를 바랍니다.




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




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




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

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

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




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