경고:충돌이 발생했 다른 버전의 동일한 의존 어셈블리

StackOverflow https://stackoverflow.com/questions/17806

  •  09-06-2019
  •  | 
  •  

문제

나는 현재 개발.인터넷 응용 프로그램으로 구성되는 20 개의 프로젝트입니다.일부 사람들의 프로젝트가 사용하여 컴파일.NET3.5 하지만,일부 사람들은 여전히있다.NET2.0 프로젝트(지금까지 문제가 없).

문제는 경우를 포함한 외부 구성요소가 다음과 같은 경고:

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

무엇이 정확하게 이 경고를 의미가 아니면 가능성은 제외하려면 이 경고(같은 사용하여#pragma 을 해제하는 소스 코드 파일)?

도움이 되었습니까?

해결책

이 경고는 두 개의 프로젝트 참조 같은 어셈블리(예: System.Windows.Forms 다)하지만 두 개의 프로젝트가 필요한 다른 버전입니다.당신은 몇 가지 옵션이 있습니다:

  1. 다시 컴파일하는 모든 프로젝트를 사용하여 동일한 버전(예를 들어동 모니다.Net3.5).이 선호하는 옵션이기 때문에 모든 코드를 실행 버전의 종속성을 그들이 컴파일되었다.

  2. 추가 바인딩을 리디렉션.이 경고를 표시하지 않도록 설정합니다.그러나,귀하의.Net2.0 프로젝트(런타임)수밖에 없다.Net3.5 버전의 의존 등의 어셈블리 System.Windows.Forms.빠르게 추가할 수 있습니다 바인딩 리디렉션은 더블 클릭하여 오류가 Visual Studio.

  3. CopyLocal=true.나는 확실하지 않으면 이 경고를 표시하지 않도록 설정합니다.그것은,옵션과 같은 위의 2,뜻하는 모든 프로젝트를 사용합니다.Net3.5 버전 시스템입니다.Windows.Forms.

여기에는 몇 가지 방법을 식별하는 잘못된 참조(s):

  • 당신이 사용할 수 있는 유틸리티 등에서 발견 https://gist.github.com/1553265
  • 또 다른 간단한 방법을 설치 구축 출력 자세한 정도(도구,옵션,프로젝트 및 솔루션 구축 실행 블렌드 및 visual studio 서로 다른 범주 프로젝트를 구축 출력 상세 정보,상세한)후 빌딩,검색,출력 창에 대한 경고,그리고보 텍스트 바로 위습니다. (Hat 팁 pauloya 는 제안이 이 답변).

다른 팁

기본적으로 이런 문제가 발생했을 때 어셈블리는 당신이 참조하는 복사"Local"로 설정"True"를 의미하는 것의 복사본을 DLL 에 위치 bin 폴더와 함께 귀하의 exe.

부터는 Visual Studio 에서 사본을 모두의 종속성을 참조 어셈블리뿐만 아니라,그것의 두 개의 다른 구조의 같은 어셈블리 언급되고 있습니다.이것은 일어날 가능성이 높은 경우 귀하의 프로젝트에서 별도의 솔루션,및 수 있습니다 따라서 별도로 컴파일.

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

는 희망을 의미가!

내가 원하는 게시물 pauloya 의 솔루션들에서 제공하는 위의 의견.나는 그것을 믿을위한 최고의 솔루션을 찾는 잘못된 참조가 있습니다.

가장 간단한 방법은 무엇을 찾는"잘못된 참조(s)하는 것입니다" 설정 빌드를 출력 상세도(도구,옵션,프로젝트 및 솔루션, 를 구축 및 실행 블렌드 및 visual studio 서로 다른 범주 프로젝트를 구축 출력 상세 정보,상세한)및 구축 후,검색,출력 창에 대한 경고입니다.텍스트를 참조하십시오 위습니다.

예를 들어,검색할 때 출력 패널은"분쟁"당신이 무언가를 찾을 수 있습 다음과 같다:

3>  There was a conflict between "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
3>      "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was chosen because it was primary and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was not.

당신이 볼 수 있듯이,사이에 충돌이 있 EF 버전 5 6.

가 동일한 문제와 내 프로젝트 중 하나,그러나,위의 아무도 도움을 해결하고 경고합니다.을 확인했는데 자세한 로그파일을 구축,사용 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)

나는 나는 내가 무슨 뜻인지,나는 몇 시간을 찾아 그렇게 잘하면 다른 누군가가 제공뿐만 아니라.

Visual Studio 마우스 오른쪽 버튼으로 클릭하면서 솔루션Nuget 패키지 관리 theres "통합" 탭을 설정하는 모든 패키지를 같은 버전입니다.

저는 다만 이 경고 메시지를 표시하고 청소하는 솔루션과 다시 컴파일(Build->솔루션 정)및 그것은 멀리 갔다.

가 동일한 문제 및 해결을 변경하여 다음에 web.config.

그것은 나에게 무슨 일이 있었기 때문에 나는 응용 프로그램을 실행하는 사용 Newtonsoft.Json4.0

From:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

하기:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

이에 따라 외부 구성 요소입니다.를 참조하는 경우 외부 구성 요소.인터넷 응용 프로그램을 생성 GUID 를 식별하는 구성 요소입니다.이 오류가 발생한 경우 외부 구성요소에서 참조하는 하나의 프로젝트는 동일한 이름과 하지만 서로 다른 버전과 같은 다른 구성요소에서 다른 어셈블리입니다.

이는 때때로 사용할 때 발생하는"찾아보기"를 참고가 잘못된 버전의 어셈블리,또는 다른 버전에 있는 구성 요소의 코드 저장소를 설치에는 로컬 컴퓨터에 저장할 수 있습니다.

보는 프로젝트가 이러한 충돌,구성 요소를 제거에서 참조 목록에 추가한 다음 다시 만드는 것을 확신을 가리키는 같은 파일입니다.

내가 다른 방법이 사용하는 경우 Nuget 을 관리하는 종속성입니다.하는 것을 발견했습 때때로 대하고 Nuget 일치하지 않고 Nuget 을 인식할 수 없는 귀하의 프로젝트가 동기화되지 않는 경우가 있습니다.패키지.config 이 말하는 한 가지만으로 표시된 경로를 참고-특성을 나타냅니다 다른 것입니다.

는 경우 당신이 기꺼이 갱신의 종속성을 다음과 같이 하십시오.

  1. 솔루션 탐색기에서 마우스 오른쪽 단추로 클릭하고,프로젝트'를 클릭 관리 Nuget 패키지'

  2. 선택'설치된 패키지'탭에서 왼쪽 창에서 기 설치 패키지 복사할 수 있습니다 당신의 패키지가 있습니다.귀하의 config 데스크탑 첫 번째가 많은 경우에는,그래서 당신은 수 십자가 확인 구글 무엇을 보 Nuget pkgs 설치

  3. 을 제거하는 패키지입니다.의 확인,우리는 우리를 추가하기 위하여 려고 하고 그들이 바로 뒤입니다.

  4. 즉시 설치할 필요한 패키지.What Nuget 할 것입니다하지만 당신을 얻을 최신 버전으로,하지만 변경을 참조하고,또한 추가 바인딩을 리디렉션한다.

  5. 이렇게 모두를 위해 귀하의 프로젝트입니다.

  6. 솔루션 수준에서,당 깨끗하고 다시 작성합니다.

할 수 있습을 시작으로 낮은 프로젝트를 당신의 방식으로 작동하는 높은 수준의 사람들,그리고 다시 각 프로젝트로를 따라 이동합니다.

지 않는 경우 업데이트하려는 귀하의 의존성,다음 사용할 수 있는 패키지 관리자 콘솔,구문을 사용하여 업데이트 패키지 이름[여][packageName]-버전[버전 번호]

=>확인이 될 것이 인스턴스의 응용 프로그램이 설치되어 부분적으로 있습니다.

=>첫 번째의 모든 제거하는 인스턴스에서 응용 프로그램을 제거합니다.

=>한 다음,깨끗하고 다시 구축하려고 배포할 수 있습니다.

이는 해결이 내 문제입니다.너무 당신을 도움이되기를 바랍니다.Best Regards.

또한 이러한 문제에 대한 내 경우에는 그로 인해 발생하는 데는"특정 버전"등의 수에 참조 true 로 설정되어 있습니다.이러한 변경을 거짓에서 이러한 참조를 해결 문제입니다.

이런 일이 나에게 너무입니다.한 dll 을 참조 두번:일단 바로(에서 참조)및 번 간접적으로(참조에 의해 다른 참조)를 이용하실 수 있습니다내가 직접 참조,청소&건 솔루션입니다.문제를 수정했습니다.

  1. 열"솔루션 탐색기".
  2. Click on"표시"모든 파일
  3. 을 확장하"참"
  4. 당신이 볼 수나(또는 그 이상)참조(s)약간 다른 아이콘 나머지 부분보다.일반적으로,그것은 노란색 상자에 당신이 제안을 둡니다.그냥 제거합니다.
  5. 추가 참조 다시 컴파일 코드입니다.
  6. 습니다.

내 경우에,문제가 있었 MySQL 참조.게,내가 목록을 세 가지 버전의 밑에 그것의 목록을 모두 사용 가능한 참조;습니다.net2.0,.net4.0.net4.5 입니다.나는 다음 과정은 1~6 위에 그것이 나를 위해 일했습니다.

다른 것은 고려하고 확인하는지 확인을 하지 않는 모든 서비스를 실행하는 사용하는 bin 폴더에 있습니다.이 있는 경우에는 서비스를 중지하고 재건 솔루션

가 될 것으로 보인 문제 Mac Visual Studio 편집하는 경우.리소스 파일이 있습니다.나는 정말로 알지 못 일어났지만 저는 이 문제로 내가 편집한다.리소에 내 Mac.열 프로젝트 윈도우에서,열 파일과 그들지 않는 경우 수정되었다.그래서 나는 그들을 편집,저장,그리고 모든 것이 다시 일을 시작 Mac too.

나는 이러한 문제를 내는 프로젝트에 관한 것이었 NETStandardLibrary 하나의 어셈블리 출판되었다 netcore.게시로 netstandard 문제가 사라졌

를 사용하는 경우 NuGet 모든되었다:

  1. 오른쪽 클릭하여 프로젝트 관리를 클릭합 NuGet 패키지..

  2. 을 클릭합 톱에서 오른쪽 상단

  3. 일반을 클릭 탭 NuGet 패키지 관리자에서 위의 패키지원

  4. 체크인"건너뛰기용 바인딩을 리디렉션에"바인딩을 리디렉션

  5. 깨끗하고 재건하고 경고 갔

쉬워요

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top