c# system io - 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다.





15 Answers

이 문제를 해결하기 위해 몇 가지 작업을 수행 할 수 있습니다. 먼저 Windows 파일 검색을 사용하여 하드 드라이브에서 어셈블리 (.dll)를 검색하십시오. 결과 목록을 얻은 다음보기 -> 세부 정보 선택 ...을 선택하고 "파일 버전"을 선택하십시오. 이렇게하면 결과 목록에 버전 번호가 표시되므로 이전 버전의 출처를 확인할 수 있습니다.

또한 Lars가 말했듯이 GAC에서 어떤 버전이 나열되어 있는지 확인하십시오. 이 Microsoft 문서 에서는 GAC에서 발견 된 어셈블리는 빌드 중에 로컬로 복사되지 않으므로 모두 다시 빌드하기 전에 이전 버전을 제거해야 할 수도 있습니다. (당신을 위해 배치 파일을 만드는 방법에 대한 노트는 이 질문에 대한 내 대답을 참조하십시오)

이전 버전의 출처를 여전히 알 수 없으면 Visual Studio와 함께 제공되는 fuslogvw.exe 응용 프로그램을 사용하여 바인딩 실패에 대한 자세한 정보를 얻을 수 있습니다. Microsoft는이 도구에 대한 정보를 here . HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog 레지스트리 키를 1로 설정하여 로깅을 설정해야합니다.

filenotfoundexception 파일 이나

C # Windows Forms 응용 프로그램 (Visual Studio 2005)에서 일부 단위 테스트를 실행하려고하는데 다음 오류가 발생합니다.

System.IO.FileLoadException : 파일 또는 어셈블리 '유틸리티, 버전 = 1.2.0.200, 문화 = 중립, PublicKeyToken = 764d581291d764f7'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040) **

x.Foo.FooGO ()에서

Foo.cs에서 x.Foo.Foo2 (String groupName_) : 123 행

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

System.IO.FileLoadException : 파일 또는 어셈블리 '유틸리티, 버전 = 1.2.0.203, 문화 = 중립, PublicKeyToken = 764d581291d764f7'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)

필자의 참고 문헌을 Utility version 1.2.0.203 대한 참조 만 Utility version 1.2.0.203 (다른 하나는 오래되었습니다).

이 DLL 파일의이 이전 버전을 참조하려고하는 것이 무엇인지 알아내는 방법에 대한 제안 사항은 무엇입니까?

게다가, 나는 내 하드 드라이브에이 오래된 어셈블리가 있다고 생각하지 않는다. 이 오래된 버전이있는 어셈블리를 검색 할 수있는 도구가 있습니까?




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

리플렉션을 통해 어셈블리 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)이 없으면 작동하지 않습니다.




버전을 신경 쓰지 않고 앱을 실행하려면 참조를 마우스 오른쪽 버튼으로 클릭하고 '특정 버전'을 false로 설정하십시오. 다른 솔루션은 나를 위해 작동하지 않을 것입니다.




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. 프로젝트 폴더에서 objbin 폴더 삭제

Clean은 작동하지 않았고, 재 작성은 작동하지 않았으며, 모든 참조는 괜찮 았지만 라이브러리 중 하나를 작성하지 않았습니다. 이러한 디렉토리를 삭제하면 모든 것이 완벽하게 작동합니다.




리플렉션을 사용하여 늦게 바인드하려고하면 바인딩하려는 어셈블리의 이름이 강하거나 공개 키 토큰이 변경된 경우 똑같은 오류가 발생합니다. 실제로 지정된 공용 키 토큰으로 발견 된 어셈블리가 없더라도 오류는 동일합니다.

오류를 해결하려면 올바른 공용 키 토큰을 추가해야합니다 (dll에서 sn -T를 사용하여 가져올 수 있음). 희망이 도움이됩니다.




나는 누군가를 내 전단 어리 석음으로 누리게 할 것이다. 필자는 완전히 별개의 응용 프로그램에 대한 종속성을 가지고 있습니다 (이 App1을 호출합시다). 해당 App1의 dll은 새 응용 프로그램 (App2)으로 가져옵니다. APP1에서 업데이트 할 때마다 새 DLL을 만들어 App2에 복사해야합니다. 잘. . . 나는 두 개의 서로 다른 App1 버전 사이에서 복사하고 붙여 넣는 것에 질려있어 dll에 'NEW_'라는 접두어를 추가했다.

잘. . . 빌드 프로세스가 / bin 폴더를 스캔하고, 잘못 일치하는 부분이있을 때 위와 같은 오류 메시지가 표시됩니다. 내 "new_"버전을 삭제하고 그냥 멋쟁이를 만들었습니다.




기본 ASP.NET MVC 4 프로젝트를 만들고 NuGet을 통해 DotNetOpenAuth.AspNet을 추가했다고 덧붙이고 싶습니다. Microsoft.Web.WebPages.OAuth에 대한 불일치 DLL 파일을 참조한 후 동일한 오류가 발생했습니다.

이 문제를 해결하기 위해 Update-Package 를 수행하고 전체 재 구축을 위해 솔루션을 정리했습니다.

그것은 저를 위해 일했고 게으른 방법의 종류입니다,하지만 시간은 돈입니다 : - P




내 app.config에

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

npgsql의 경우. 어쨌든 사용자의 컴퓨터에서 내 app.exe.config가 누락되었습니다. 어리석은 사용자인지, 설치 프로그램 결함인지, 바이러스 백신을 아직 해킹했는지 확실하지 않습니다. 파일을 대체하면 문제가 해결됩니다.




나에게 "Local.testtesttings"파일의 코드 커버리지 설정은 문제를 야기했다. 거기에서 참조 된 파일을 업데이트하는 것을 잊었습니다.




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




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

  1. 예외 메시지에서 "문제점"라이브러리의 이름과 "예상 된"버전 번호를 얻으십시오.

  1. 솔루션에서 해당 .dll의 모든 복사본 을 찾아 마우스 오른쪽 단추로 클릭하고 해당 .dll 버전을 확인하십시오.

그래,이 예제에서 내 .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을 사용한 후 이러한 dependentAssembly 섹션을 동기화해야합니다.




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




오늘도 Entity Framework를 변경 한 후에 Add-Migration을 수행하지 못하는 문제가있었습니다.

내 솔루션에는 두 가지 프로젝트가 있었으며,이를 EF 모델과 컨텍스트를 보유한 클래스 라이브러리 프로젝트 인 "클라이언트"와 "데이터"라고합시다. 클라이언트가 데이터 프로젝트를 참조했습니다.

두 프로젝트에 모두 사인을하고 나중에 EF 모델을 변경했습니다. 서명을 제거한 후 마이그레이션을 추가 할 수 있었고 새 프로젝트에 서명 할 수있었습니다.

나는 이것이 누군가를 위해 유용 할 수 있기를 희망하며, 장기간의 좌절감을 덜어 주길 바랍니다.




Related