는 위치하고 있으며 어셈블리의 매니페스트 정의와 일치하지 않고 어셈블리를 참조

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

문제

나는 실행하려고 일부 단위 테스트에서는 C#Windows Forms 응용 프로그램(Visual Studio2005),그리고 나는 다음과 같은 오류가:

시스템입니다.IO.FileLoadException:Could not load file or assembly'유틸리티,Version=1.2.0.200,Culture=neutral,PublicKeyToken=764d581291d764f7'중 하나 또는 그것의 종속성입니다.는 위치하고 있으며 어셈블리의 매니페스트 정의와 일치하지 않고 어셈블리에 참조.(예외에서 는:0x80131040)**

x.Foo.FooGO()

x.Foo.Foo2(String groupName_)in Foo.cs:선 123

x.Foo.UnitTests.FooTests.TestFoo()에 FooTests.cs:선 98**

시스템입니다.IO.FileLoadException:Could not load file or assembly'유틸리티,Version=1.2.0.203,Culture=neutral,PublicKeyToken=764d581291d764f7'중 하나 또는 그것의 종속성입니다.는 위치하고 있으며 어셈블리의 매니페스트 정의와 일치하지 않고 어셈블리에 참조.(예외에서 는:0x80131040)

내가 보기에 참조 나는 단지 참조 Utility version 1.2.0.203 (다른 하나는 old).

는 방법에 대한 어떤 제안 나는 무엇인지 파악하려는 참이 오래된 버전의 이 DLL 파일입니까?

또한,나는 생각하지 않도 이전 어셈블리에 하드 드라이브입니다.이 있을 검색하는 도구이 오래된 버전이 있습니까?

도움이 되었습니까?

해결책

.NET 어셈블리 로더는 1.2.0.203을 찾을 수 없지만 1.2.0.200을 찾았습니다. 이 어셈블리는 요청 된 내용과 일치하지 않으므로이 오류가 발생합니다. 간단히 말해서, 참조 된 어셈블리를 찾을 수 없습니다. 올바른 어셈블리를 GAC 또는 응용 프로그램 경로에 넣어 올바른 어셈블리를 찾을 수 있는지 확인하십시오. 또한 참조하십시오 http://blogs.msdn.com/junfeng/archive/2004/03/25/95826.aspx.

다른 팁

당신이 할 수 있는 몇 가지 이 문제를 해결합니다.첫째,Windows 파일 검색을 검색에 대한 하드 드라이브 어셈블리(.dll)가 있습니다.일단 당신이 결과 목록 하 보기->선택합니다.다음 확인"파일 버전".이 표시됩니다 버전 번호 목록에서의 결과,그래서 당신은 당신이 볼 수있는 오래된 버전이 될 수 있습니다.

또한,라스 말했다 확인해 GAC 에 보 어떤 버전이 표시됩니다. 이 문서는 Microsoft 국는 어셈블리에서 발견된 GAC 에 복사되지 않는 로컬로는 빌드하는 동안,그래서 당신은 당신을 제거할 필요가 있을 수 있습기 전에 이전 버전을 재건하다.(참조하십시오 내에 응답 이 질문 에 배치 파일을 만들고 이를 위해 당신)

는 경우 당신은 여전히 파악할 수 없는 오래된 버전에서 사용할 수 있습니다 fuslogvw.exe 응용 프로그램과 함께 제공되는 Visual Studio 에 대한 자세한 정보를 얻기 위해 바인딩은 실패입니다.Microsoft 에 대한 정보를 이 도구 .참고로 당신은 로깅을 사용하여 설정 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog 레지스트리 키를 1.

나는 방금이 문제를 스스로 달려 갔고, 문제는 다른 사람들이 달린 것과 다른 것이라는 것을 알았습니다.

내 주요 프로젝트가 CompanyClasses.dll 및 CompanyControls.dll을 참조하는 두 개의 DLL이있었습니다. 런타임 오류가 발생했습니다.

파일 또는 어셈블리 'Company Classes, 버전 = 1.4.1.0, Culture = Neutral, PublicKeyToken = 045746BA8544160C'또는 그 종속성 중 하나를로드 할 수 없습니다. 위치 어셈블리의 매니페스트 정의는 어셈블리 참조와 일치하지 않습니다.

문제는 내 시스템에 1.4.1의 버전 번호가있는 CompanyClasses.dll 파일이 없었습니다. GAC에 없음, 앱 폴더에 없습니다 ... 어디서나 없습니다. 하드 드라이브 전체를 검색했습니다. 내가 가진 모든 CompanyClasses.dll 파일은 1.4.2입니다.

진짜 문제는 CompanyClasses.dll의 CompanyControls.dll 버전 1.4.1을 참조했습니다. 방금 CompanyControls.dll (CompanyClasses.dll 1.4.2를 참조한 후)을 다시 고합 하고이 오류가 사라졌습니다.

다음은 어셈블리 버전을 버전 3.1.0.0으로 리디렉션합니다. App.Config에서 항상이 참조를 업데이트 할 스크립트가 있으므로이 문제를 다시는 처리 할 필요가 없습니다.

반사를 통해 Assembly PublicKeyToken을 얻고 .dll 파일 자체 에서이 블록을 생성 할 수 있습니다.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

XML 네임 스페이스 속성 (xmlns)이 없으면 작동하지 않습니다.

Visual Studio를 사용하는 경우 "깨끗한 솔루션"을 시도한 다음 프로젝트를 재건하십시오.

다른 대답은 저에게 효과가 없습니다. 버전에 관심이없고 앱이 실행되기를 원한다면 참조를 마우스 오른쪽 버튼으로 클릭하고 '특정 버전'을 False로 설정하십시오 ... 이것은 저에게 효과적입니다.enter image description here

방금이 문제를 해결했고 문제는 응용 프로그램 디버그 디렉토리에 .dll의 오래된 사본이 있다는 것이 문제였습니다. GAC 대신 (GAC 대신) 확인하여 확인할 수도 있습니다.

NUGET 패키지를 추가했는데 응용 프로그램의 검은 색 상자 부분이 이전 버전의 라이브러리를 참조하고 있음을 알기 위해 만 추가했습니다.

패키지를 제거하고 이전 버전의 정적 DLL 파일을 참조했지만 web.config 파일은 다음과 같이 업데이트되지 않았습니다.

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

패키지를 제거했을 때 반대로 반대로 한 것에 대해 다음과 같습니다.

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

필자의 경우 ASP.NET 응용 프로그램을 실행하는 동안이 오류가 발생했습니다. 해결책은 다음과 같습니다.

  1. 삭제 obj 그리고 bin 프로젝트 폴더의 폴더

Clean은 작동하지 않았고 재건축이 작동하지 않았으며 모든 참조는 괜찮 았지만 도서관 중 하나를 작성하지 않았습니다. 해당 디렉토리를 삭제 한 후 모든 것이 완벽하게 작동했습니다.

필자의 경우 C : Windows microsoft.net framework ~ temporary asp.net files directory의 이전 버전의 DLL 버전이었습니다. 이전 버전을 삭제하거나 교체하거나 프로젝트에서 DLL에 대한 참조를 제거하고 추가 할 수 있습니다. 기본적으로 어느 쪽이든 임시 ASP.NET 파일에 대한 새로운 포인터가 생성됩니다.

나는 지금 당장 모든 사람의 마음을 날려 버릴 것입니다. . .

모든 것을 삭제하십시오 <assemblyBinding> .config 파일에서 참조 한 다음 Nuget 패키지 관리자 콘솔 에서이 명령을 실행합니다.

Get-Project -All | Add-BindingRedirect

우리에게 문제는 다른 것에 의해 발생했습니다. DeVexpress 구성 요소의 라이센스 파일에는이 특정 컴퓨터에 설치되지 않은 이전 버전의 구성 요소 용 두 줄이 포함되었습니다. 라이센스 파일에서 이전 버전을 제거하면 문제가 해결되었습니다.

성가신 부분은 오류 메시지가 어떤 참조가 문제를 일으키는지를 나타내지 않았다는 것입니다.

반사를 사용하여 늦게 바인딩하려고 시도하면이 동일한 오류가 발생합니다. 실제로 지정된 공개 키 토큰으로 발견 된 어셈블리가 없더라도 오류는 동일합니다.

오류를 해결하기 위해 올바른 공개 키 토큰 (DLL에서 SN -T를 사용하여 얻을 수 있음)을 추가해야합니다. 도움이 되었기를 바랍니다.

광산은 Nathan Bedford의 게시물과 매우 비슷한 상황 이었지만 약간 뒤틀 었습니다. 내 프로젝트도 변경된 DLL을 두 가지 방식으로 참조했습니다. 1) 직접 및 2) 변경된 DLL을 참조 한 구성 요소 (클래스 라이브러리)를 참조하여 간접적으로. 이제 구성 요소 (2)의 Visual Studio 프로젝트는 변경된 DLL의 올바른 버전을 참조했습니다. 그러나 작곡 자체의 버전 번호는 변경되지 않았습니다. 결과적으로 새 버전의 프로젝트 설치는 클라이언트 시스템에서 해당 구성 요소를 대체하지 못했습니다.

최종 결과 : 직접 참조 (1) 및 간접 참조 (2)는 클라이언트 시스템에서 변경된 DLL의 다른 버전을 가리키고있었습니다. 내 개발자 기계에서 그것은 잘 작동했습니다.

해상도 : 응용 프로그램을 제거합니다. 응용 프로그램 폴더에서 모든 DLL을 삭제합니다. RE-Install.simple 내 경우에는 단순하십시오.

나는 누군가가 내 전단 어리 석음으로부터 혜택을받을 것이다. 완전히 별도의 응용 프로그램에 대한 의존성이 있습니다 (이 APP1이라고 부르겠습니다). 해당 APP1의 DLL은 내 새 응용 프로그램 (APP2)으로 가져옵니다. APP1에서 업데이트를 할 때마다 새로운 DLL을 만들어 APP2에 복사해야합니다. 잘. . . 나는 두 가지 다른 APP1 버전 사이의 복사 및 붙여 넣기에 지쳤으므로 DLL에 'New_'접두사를 추가했습니다.

잘. . . 빌드 프로세스가 /bin 폴더를 스캔하고 무언가를 잘못 일치시킬 때 위에서 언급 한 것과 동일한 오류 메시지가 포함되어 있다고 생각합니다. "New_"버전을 삭제했고 Dandy 만 만들었습니다.

내 문제는 소스 코드를 참조 된 어셈블리를 끌어 내지 않고 새 시스템에 복사하는 것입니다.

내가 오류를 해결 한 것은 아무것도 없어서 서둘러 빈 디렉토리를 완전히 삭제했습니다. 내 소스 코드를 재건하고 그때부터 작동했습니다.

기본 ASP.NET MVC 4 프로젝트를 만들고 NUGET을 통해 DotNetOpenauth.aspnet을 추가했다고 덧붙이고 싶습니다. 이로 인해 Microsoft.web.webpages.oauth에 대한 불일치 DLL 파일을 참조한 후 동일한 오류가 발생했습니다.

그것을 고치기 위해 나는 a를했다 Update-Package 전체 재건을 위해 솔루션을 청소했습니다.

그것은 나를 위해 일했고 일종의 게으른 방법이지만 시간은 돈입니다 : -p

Team Foundation Server의 빌드 서비스를 구축하는 동안이 오류가 발생했습니다. NUGET에 추가 된 동일한 라이브러리의 다른 버전을 사용하여 솔루션에 여러 프로젝트가있었습니다. Nuget으로 모든 오래된 버전을 제거하고 새로운 버전을 모두 참조로 추가했습니다.

Team Foundation 서버는 모든 DLL 파일을 하나의 디렉토리에 넣고 물론 한 번에 특정 이름의 하나의 DLL 파일 만있을 수 있습니다.

내 app.config에는 a가 포함되어 있습니다

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

NPGSQL 용. 어떻게 든 사용자의 컴퓨터에서 내 app.exe.config가 누락되었습니다. 어리석은 사용자, 설치자 글리치 또는 안티 바이러스를 버렸는지 확실하지 않습니다. 파일을 교체하면 문제가 해결되었습니다.

방금이 오류를 얻는 또 다른 이유를 찾았습니다. 특정 라이브러리의 모든 버전에서 GAC를 정리하고 실행 파일과 함께 배포 된 특정 버전을 참조하여 프로젝트를 구축했습니다. 프로젝트를 실행할 때이 예외는 새로운 버전의 라이브러리를 검색했습니다.

그 이유는 게시자 정책. GAC에서 라이브러리의 버전을 제거하면 출판사 정책 어셈블리를 제거하는 것을 잊어 버렸으므로 로컬로 배치 된 어셈블리를 사용하는 대신 어셈블리 로더를 찾았습니다.

나에게 "local.testtings"파일의 코드 커버리지 구성은 문제를 일으켰다. 참조 된 파일을 업데이트하는 것을 잊었습니다.

프로젝트의 빈 폴더의 내용을 삭제하고 솔루션을 재구성하면 문제가 해결되었습니다.

솔루션을 청소하고 재구성하면 출력 디렉토리에서 모든 DLL을 대체하지 않을 수 있습니다.

내가 제안한 것은 "bin"에서 "Oldbin"또는 "Obj"로 "Oldobj"로 폴더를 바꾸는 것입니다.

그런 다음 사일러스를 다시 구축해보십시오.

제 3 자 DLL을 사용하는 경우 성공적인 빌드 후 새로 만든 "빈"또는 "OBJ"폴더로 복사 해야하는 경우.

이것이 당신에게 효과가 있기를 바랍니다.

폴더 위치에서 이전 어셈블리를 수동으로 삭제 한 다음 새로운 어셈블리에 대한 참조를 추가하면 도움이 될 수 있습니다.

동일한 오류가 발생했습니다 ... 내 경우에는 다음과 같이 해결되었습니다.

  • 처음에 응용 프로그램이 설치되면 여기 사람들은 응용 프로그램에서 Microsoft Enterprise Library 4.1을 사용했습니다.
  • 지난 주에 내 기계는 포맷되었고 오늘 그 응용 프로그램을 구축했을 때 엔터프라이즈 라이브러리 어셈블리가 누락 된 오류가 발생했습니다.
  • 그런 다음 Google에서 첫 번째 검색 항목으로 얻은 Microsoft Enterprise Library 5.0을 설치했습니다.
  • 그런 다음 응용 프로그램을 구축하면 위의 오류 (위치 어셈블리의 매니페스트 정의)가 어셈블리 참조와 일치하지 않습니다.
  • 많은 검색 작업 및 분석 후 응용 프로그램이 4.1.0.0을 참조하고 BIN 폴더의 DLL이 버전 5.0.0.0이라는 것을 알았습니다.
  • 내가 한 일은 Microsoft Enterprise Library 4.1을 설치하는 것이 었습니다.
  • 이전 참조 (5.0)를 제거하고 4.0 참조를 추가했습니다.
  • Application & Voila를 구축했습니다.

이 문제를 해결하는 내 방법은 다음과 같습니다.

  1. 예외 메시지에서 "문제"라이브러리의 이름과 "예상"버전 번호를 가져옵니다.

enter image description here

  1. 찾다 모든 사본 솔루션에서 .dll의 .dll을 마우스 오른쪽 버튼으로 클릭하고 .dll 버전을 확인하십시오.

enter image description here

좋아,이 예에서 .dll은 확실히 2.0.5022.0입니다 (예외 버전 번호는 잘못되었습니다).

  1. 모든에서 예외 메시지에 표시된 버전 번호를 검색합니다. .csproj 솔루션의 파일. 이 버전 번호를 DLL의 실제 번호로 바꾸십시오.

그래서이 예에서는 이것을 대체 할 것입니다 ...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

... 이건 ...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

작업이 완료되었습니다!

제 경우에는 의자와 키보드 사이에 문제가있었습니다 :-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

둘 이상의 다른 어셈블리는 다른 버전의 Dotnetopenauth 라이브러리를 사용하고 싶었으므로 문제가되지 않습니다. 또한 내 로컬 컴퓨터에서 web.config가 Nuget에 의해 자동으로 업데이트되었습니다.

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

그런 다음 새 Web.config를 프로덕션 서버에 복사/배포하는 것을 잊었다는 것을 깨달았습니다. 따라서 web.config를 배포하는 수동 방법이있는 경우 업데이트되는지 확인하십시오. 프로덕션 서버를 위해 완전히 다른 web.config가있는 경우 NUGET을 사용한 후 이러한 종속 항분 섹션을 동기화해야합니다.

"와 같은 오류가 발생하면"위치 어셈블리의 매니페스트 정의는 어셈블리 참조와 일치하지 않습니다."그리고 당신이 통해 업데이트 한 경우 프로젝트> vs에서 Nuget 패키지 및 업데이트 탭 관리, 가장 먼저 할 수있는 일은 버전을 확인한 후 다른 버전의 패키지를 설치하는 것입니다. 너겟 갤러리 페이지 패키지 관리자 콘솔에서 Folowing 명령을 실행합니다.

PM> Install-Package YourPackageName -Version YourVersionNumber 
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0

대답은 문제의 패키지와 직접 관련이 없으며 다시 요청 받았지만, 일종의 일반적이고 여전히 관련이 있으며 누군가가 도움이되기를 바랍니다.

내가 건축 한 어셈블리와 같은 이름을 가진 어셈블리를 참조 하여이 오류 메시지를 받았습니다.

이것은 컴파일되었지만 현재 프로젝트 어셈블리로 참조 된 어셈블리를 덮어 씁니다. 따라서 오류가 발생합니다.

이를 해결하기 위해 프로젝트의 이름과 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 '속성'을 선택하여 사용할 수있는 어셈블리 속성을 변경했습니다.

AssemblyInfo.cs 파일의 AssemblyVersion에서 *를 지정하는 대신 고정 버전 번호를 사용하십시오. *는 각 컴파일의 버전 번호를 변경합니다. 그것은 제 경우 에이 예외의 문제였습니다.

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