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


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의 경우 다른 AssemblyVersionAssemblyFileVersion 속성이 지정됩니다.

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

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.