파일 또는 어셈블리 또는 해당 종속성 중 하나를로드 할 수 없습니다


238

이러한 "파일 또는 어셈블리 또는 해당 종속성 중 하나를로드 할 수 없습니다"문제 중 하나가 있습니다.

추가 정보 : 파일 또는 어셈블리 'Microsoft.Practices.Unity, Version = 1.2.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)

나는 이것을 일으키는 원인이나 원인을 찾기 위해 어떻게 디버깅 할 수 있는지 전혀 모른다.

솔루션 카탈로그 .csproj 파일 및 Unity가있는 모든 곳에서 검색했습니다.

참조 포함 = "Microsoft.Practices.Unity, 버전 = 2.0.414.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL"

내 프로젝트에서 1.2.0.0에 대한 참조를 찾을 수 없습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

또한 이와 같은 문제를 일반적으로 디버깅하는 방법에 대한 팁을 부탁드립니다.


1
참조 된 어셈블리 중 하나가 오래된 Unity라이브러리 에서 물건을 사용할 수 있습니까?
— decyclone

3
아마도 ... 그러나 어떤 어셈블리를 어떻게 찾을 수 있습니까? 내 솔루션에 많은 프로젝트가 있고 많은 잠재적 인 용의자들 ... 시행 착오
— 무차별 대단한

3
어셈블리 참조가 아니며 버전 2.0을 참조하십시오. 그러나 런타임시 CLR은 이전 버전 인 1.2를 찾습니다. 빌드 디렉토리에 이전 DLL이 표시되지 않으면 Fuslogvw.exe를 사용하여 CLR이 이전 사본을 찾은 방법을 찾으십시오.
— Hans Passant

2
프로젝트의 bin 폴더를보고 프로젝트의 dll이 이름과 충돌하는지 확인하십시오. 그 것을 삭제 한 다음 솔루션을 다시 빌드하십시오. 그것은 나를 위해 일했다.
— coggicc

11
"또는 그 의존성 중 하나"는 정말 귀찮은 부분입니다. "종속성 중 하나"를로드 할 수없는 경우 오류는 "종속성 중 하나"를로드 할 수 없음을 표시해야합니다. 현재의 양식은 쓸모가 없으며, 짐을 싣지 못할 수도 있습니다.
— Paul McCarthy

답변:


116
  1. 이전 버전의 Unity를 참조하는 어셈블리를 참조하고 있는지 확인하십시오. 예를 들어 ServiceLocator.dll, 이전 버전의 Unity 어셈블리가 필요한 어셈블리가 있다고 가정 해 봅시다 . 이제 참조 할 때 이전 버전의 Unity ServiceLocator를 제공해야하므로 문제가 발생합니다.

  2. 모든 프로젝트가 어셈블리를 빌드하는 출력 폴더 일 수 있으며 이전 버전의 통일성이 있습니다.

FusLogVw 를 사용 하여 이전 어셈블리를로드하는 사람을 찾고 로그의 경로를 정의하고 솔루션을 실행 한 다음 Unity 어셈블리가로드 된 첫 번째 라인을 확인하고 (FusLogvw에서) 두 번 클릭하고 호출을 볼 수 있습니다. 조립하고 여기에 있습니다.


6
FuseLogVw의 로그 파일은 어디에 있습니까
— Stiger

1
로그 파일을 찾지 않으려면 사용자 정의 로그 경로를 지정할 수 있습니다. 설정, 사용자 정의 로그 경로 사용 확인란을 선택하고 사용자 정의 로그 경로를 입력 한 후 새로 고칩니다.
— RedGreenCode

82

IIS 관리자 열기

응용 프로그램 풀 선택

그런 다음 사용중인 수영장을 선택하십시오

고급 설정으로 이동 (오른쪽)

32 비트 응용 프로그램 사용 플래그를 false로 변경하십시오.


IIS-> 각 ApplicationPool 선택-> 기본 설정-> ".NET Framework 버전"드롭 다운에서 최신 프레임 워크가 선택되어 있는지 확인
— Martin

VS에서 프로젝트를 마우스 오른쪽 버튼으로 클릭 할 수도 있습니다. 선호 32 비트 체크 표시를 제거
— eran otzap

감사. 효과가있었습니다. 글쎄, 그것은 이미 시도하기 위해 이미 사실이었다. 나는 그것을 거짓으로 만들었고 효과가있었습니다.
— meekash55

한 서버에서 다른 서버로 프로젝트를 병합했을 때 솔루션 덕분 에이 플래그는 다시 False였습니다!
— Appsum 솔루션

69

저에게는 다른 솔루션 중 어느 것도 작동하지 않았습니다 (정리 / 재 구축 전략 포함). Visual Studio 를 닫았다가 다시 여는 다른 해결 방법을 찾았 습니다 .

Visual Studio가 솔루션과 모든 프로젝트를 다시로드하고 프로세스의 종속성을 다시 확인해야한다고 생각합니다.


33
이것이 효과가 없다고 생각되면 최소한 시도하십시오. 내가 할 때까지 나는 그것을 믿을 수 없었다.
— 벤 컬

3
😍😍😍😍😍😍😍😍😍😍😍 나를 위해 일했다
— Devidas M Das

48

솔루션에서 디버그 및 릴리스 폴더를 정리하십시오. 그런 다음 단결을 제거하고 다시 추가하십시오.


3
이 문제는 많은 것들로 인해 발생할 수 있습니다 ... 솔루션이 내 문제를 해결했으며 다른 사람들도 해결할 수 있습니다.
— Scott Rippey

1
@ ScottRippey 이것은 나를 위해 일했습니다. 먼저 모든 .pdb 파일을 삭제 한 다음 프로젝트를 다시로드하고 다시 빌드했습니다.
— botenvouwer

21

99 %에서 파일 또는 어셈블리를로드 할 수 없거나 해당 종속성 중 하나가 종속성 으로 인해 발생합니다! 다음 단계를 따르는 것이 좋습니다.

  1. http://www.dependencywalker.com/ 에서 Dependency Walker 를 다운로드 하십시오.

  2. 실행 종속성 워커를 하고 (내 경우에 DLL을 엽니 다 NativeInterfaces.dll)

  3. 빨간색 오류 파일 열기 오류로 하나 이상의 dll을 볼 수 있습니다 ...

  4. 시스템에서이 dll이 누락되었음을 의미합니다. 내 경우에는 dll 이름이MSVCR71.DLL

  5. Google에서 누락 된 dll을 다운로드하고 올바른 경로로 복사 할 수 있습니다 (내 경우 c:\windows\system32)

  6. 이 시점에서 GAC (Global Assembly Cache)에 새 dll을 등록해야합니다. DOS 터미널을 열고 다음을 작성하십시오.

    cd \Windows\System32
    regsvr32 /i msvcr71.dll
  7. 응용 프로그램을 다시 시작하십시오!


22
종속성 워커는 훌륭하지만 인터넷에서 Windows로 임의의 DLL을 복사하는 것은 좋지 않습니다. 해당 dll을 제공하는 설치 관리자를 찾는 것이 좋습니다.
— RJFalconer

몇 개의 파일 ( API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL)을 찾을 수 없어서이 stackoverflow 질문으로 이어 졌습니다. 기본적으로 일부 파일에 대해 오 탐지를 볼 수 있음을 명심하십시오. 링크는 더 자세한 정보를 제공합니다.
— cheriejw

16

Microsoft Enterprise Library (.NetTiers에서 참조)는 이전 버전의 Unity를 참조하는 문제였습니다. 이 문제를 해결하기 위해 web.config에서 다음 바인딩 리디렉션을 사용했습니다.

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

또는 엔터프라이즈 라이브러리를 최신 버전으로 만 업데이트 할 수도 있습니다.


16

다음은 나를 위해 일했습니다.

  • 임시 파일 제거 C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET 파일
  • VSTS를 닫고 다시 열기
  • 동일한 DLL 제거 및 추가 (참고 : 동일한 버전을 추가)

15

프로젝트에서 Web.config / App.config 파일을 확인하십시오. 버전 번호가 올바른지 확인하십시오.

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />

이것은 나를 위해 일했습니다.


2
그렇지의 app.config Web.config의, 있었지만 이것은 나를 위해 일한
— samneric

15

5 년 전에 게시 된 최초의 질문에도 불구하고, 문제는 여전히 지속되며 다소 성가시다.

일반적인 해결책은 무엇이 잘못되었는지 이해하기 위해 참조 된 모든 어셈블리를 철저히 분석하는 것입니다. 이 작업을보다 쉽게하기 위해 .NET 어셈블리 ( .dll또는 .exe파일)를 선택하여 충돌하거나 누락 된 참조를 강조 표시하면서 참조 된 모든 어셈블리의 그래프를 가져올 수 있는 도구 (Visual Studio 확장)를 만들었습니다 .

이 도구는 Visual Studio Gallery에서 사용할 수 있습니다 : https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

출력 예 : 여기에 이미지 설명을 입력하십시오


커뮤니티 에디션의 Visual Studio
— Draex_

Visual Studio 에디션과 관련이없는 다른 문제가 있어야한다고 생각합니다. VS 2017 및 VS 2015 Community 에디션에서 확장을 테스트했습니다. 실제로 이것은 VS 2017 Community Edition을 통해 개발되었습니다.
— marss19

아하. 다른 확장이 설치되어 있습니까? 이 페이지에는 VS 커뮤니티에서 DGML이 지원되지 않는다고 나와 있습니다. msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport
— Draex_

1
Community Edition에는 아키텍처 도구가 없지만 DGML 편집기 자체에서 사용할 수 있습니다. Visual Studio Installer를 통해 "개별 구성 요소"-> "코드 도구"에서 "DGML 편집기 설치"를 선택하여 설치할 수 있습니다. – 수정
— marss19

11

스크린 샷솔루션 탐색기에서 솔루션이 아닌 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 빌드 탭에서 플랫폼 대상 : "모든 CPU"를 선택하십시오.


응용 프로그램 풀을 확인한 후 "32 비트 응용 프로그램 사용"이 False로 설정되었지만 플랫폼 대상은 x86입니다. CPU 또는 x64로 변경하면 문제가 해결되었습니다.
— Keith Ketterer

11

Juntos 답변은 정확 하지만 다음 사항도 고려해야합니다.

unity v2.1.505.2의 경우 다른 AssemblyVersion 및 AssemblyFileVersion 속성이 지정됩니다.

여기에 이미지 설명을 입력하십시오

AssemblyFileVersion 은 NuGet에서 사용되지만 CLR은 신경 쓰지 않습니다! CLR은 AssemblyVersion 만 사용합니다 !

따라서 리디렉션을 AssemblyVersion 속성에 지정된 버전에 적용해야 합니다. 따라서 2.1.505.0을 사용해야합니다

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>

참조 : AssemblyVersion, AssemblyFileVersion 및 AssemblyInformationalVersion의 차이점은 무엇입니까?


6

또한이 끔찍한 오류가 발생하여 이에 대한 해결책을 찾았습니다 ...

  1. 솔루션 이름을 마우스 오른쪽 버튼으로 클릭하십시오
  2. 클린 솔루션을 클릭하십시오
  3. Visual Studio를 다시 시작하십시오.
  4. Goto 프로젝트 속성 >> 빌드
  5. 구성 을 릴리스로 변경
  6. 디버깅 시작 (F5)

1), 2)

솔루션 이름을 마우스 오른쪽 버튼으로 클릭하십시오

4), 5)

구성을 릴리스로 변경

이것이 도움이되기를 바랍니다.


5
  • 이동 : 솔루션 -> 패키지
  • 고급 탭을 클릭하십시오 (페이지 아래에서 찾기).
  • 추가 어셈블리에 dll 을 추가합니다 (이 방법으로 공유 지점에 외부 dll을 추가 할 수 있음).

7
VS2010 프로젝트에 "솔루션-> 패키지"가 없습니다
— Muflix

5

이것이 도움이 될지 확실하지 않습니다.

어셈블리 속성의 어셈블리 이름과 기본 네임 스페이스가 일치하는지 확인하십시오. 이로 인해 동일한 오류가 발생하는 문제가 해결되었습니다.


우수한! 내 dll 파일 이름과 네임 스페이스가 다르므로 네임 스페이스를 복사하고 dll의 이름을 변경했습니다.
— Anynomous Khan

5

내 경우에는 bin 폴더의 Unity.MVC3이라는 비 참조 dll이 Visual Studio에서 성공하지 않고이 참조를 검색하려고 시도했기 때문에 bin 폴더에서 해당 dll을 삭제하는 것처럼 솔루션이 너무 쉽습니다.


4

감사합니다 Riddhi M. 팔로 잉이 저를 위해 일했습니다.

임시 파일 제거 C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET 파일 VSTS 닫기 및 다시 열기 동일한 DLL 제거 및 추가 (참고 : 동일한 버전을 추가)


이것에 너무 오래 보냈는데 이것이 답이라고 믿을 수 없습니다. VS 내에서 이상한 행동을 볼 때 일반적으로 좋은 해결책입니다. 감사합니다.
— Bonez024

3

당신은 솔루션에 많은 프로젝트가 있다고 말합니다 ... 글쎄, 빌드 순서의 맨 위에있는 프로젝트부터 시작하십시오. 하나를 구축하고 일단 파악하면 나머지 부분에도 동일한 수정을 적용 할 수 있습니다.

솔직히 참조를 새로 고쳐야 할 것입니다. 버전을 업데이트하고 참조를 업데이트하지 않은 것처럼 들리거나 솔루션을 소스 제어로 유지하는 경우 상대 경로 문제입니다. 가정을 확인하고 참조를 다시 추가하십시오.


3

다음은 나를 위해 일했습니다.

  • 임시 파일 제거 C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET 파일
    • 그런 다음 임시 Asp.net 파일> 속성> 보안을 마우스 오른쪽 버튼으로 클릭하고 IIS 및 프로젝트를 실행하는 모든 사용자에게 전체 제어 권한을 부여하십시오


3

아래 지침을 통해 해결 한 것과 동일한 문제가있었습니다.

  1. 도구 메뉴를 열고 옵션을 선택하십시오
  2. 옵션에서 창은 프로젝트 및 솔루션 / 웹 프로젝트로 이동합니다
  3. 검사 use the 64bit version of IIS ...

여기에 이미지 설명을 입력하십시오


2

출력 폴더에서 appname.dll 파일을 삭제해야합니다. 디버그 및 릴리스 폴더 정리 폴더를 다시 생성하고 dll 파일을 출력 폴더에 복사하십시오.


2

I "설정 시작 프로젝트로" 언로드 / 발견되지 않은 라이브러리 / 프로젝트.

그런 다음 배포했습니다.

효과가 있었다!

처음에는 어셈블리에 없기 때문에 .dll을 찾을 수 없다고 생각합니다.


2

또 다른 가능한 원인 : 실수로 두 프로젝트 모두 프로젝트 속성에서 동일한 어셈블리 이름을 지정하지 않았는지 확인하십시오.


이것을 알아내는 데 몇 시간이 걸렸습니다 .... 실수로 내 단위 테스트 프로젝트의 이름을 기본 프로젝트와 같은 이름으로 지정 했으므로 단위 테스트 프로젝트 dll이 프로젝트 dll을 덮어 써야합니다
— Iannazzi

2

Enterprise Library 5를 사용하는 .NET 4.0에 대한 내 솔루션은 다음에 대한 참조를 추가하는 것이 었습니다.

Microsoft.Practices.Unity.Interception.dll


2

상충되는 참조를 찾으십시오. 깨끗하고 재구성 한 후에도 충돌하는 참조는 여전히 문제를 야기합니다. 내 문제는 AForge와 Accord 사이였습니다. 두 참조를 모두 제거하고 특정 참조를 다시 선택하는 참조를 다시 추가했습니다 (특히 내 경우에는 어코드).


2

Unity C # Proects Checkmark없이 통일 게임을 다시 빌드하려면 작동했습니다.


2

제 경우에는 제안 된 답변 중 어느 것도 효과가 없었습니다.

다음은 나를 위해 일한 것입니다.

  1. 참조 제거
  2. DLL 이름 바꾸기
  3. 참조를 다시 가져 오기

두 번째 단계는 그것이 없이는 작동하지 않았기 때문에 분명히 중요했습니다.


2

참조의 "로컬로 복사"특성이 true로 설정되어 있고 특정 버전이 true로 설정되어 있는지 확인하십시오. 이는 Visual Studio의 응용 프로그램과 관련이 있습니다.


2

나는 오늘 이것을 가지고 있었고, 내 경우에는 문제가 매우 이상했다.

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" />
  </dependentAssembly>0.

XML의 끝에서 길 잃은 문자를 주목하십시오-어떻게 든 그것들은 버전 번호에서이 XML 블록의 끝으로 옮겨졌습니다!

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
  </dependentAssembly>

위와 voila로 변경되었습니다! 모든 것이 다시 작동했습니다.


1

당신이 Windows XP에서 응용 프로그램을 열어서이 오류 메시지가 표시되면 그것은 넷 프레임 워크 4 및 서비스 팩 3없이 작동하지 않기 때문에 해당 응용 프로그램을 먼저 설치했음을 의미합니다. 둘 다 설치 했다가이 오류가 발생하므로 해당 앱을 다시 설치해야하지만 먼저 추가 및 제거에서 제거해야합니다

이것이 작동하지 않으면 나를 학대하지 마십시오. 나는 또한 주니어입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.