source

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

manycodes 2023. 5. 16. 22:46
반응형

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

"파일, 어셈블리 또는 종속성 중 하나를 로드할 수 없습니다." 문제가 또 발생했습니다.

추가 정보:'Microsoft' 파일 또는 어셈블리를 로드할 수 없습니다.관행.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 또는 그 종속성 중 하나입니다.위치한 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT에서 제외: 0x80131040)

원인이 무엇인지, 원인을 찾기 위해 어떻게 디버깅해야 하는지 전혀 모르겠습니다.

솔루션 카탈로그 .csproj 파일을 검색하여 Unity가 있는 모든 곳에서 다음을 확인했습니다.

참조 자료에는 Microsoft="가 포함됩니다.관행.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 프로세서 아키텍처=MSIL"

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

이 문제를 어떻게 해결해야 할지 생각해 보셨습니까?

  1. 어셈블리를 참조하고 있으며 이 어셈블리가 이전 버전의 유니티를 참조하는지 확인합니다.를 들어, 예들어다같은어가있가다다니정합고리셈블를라는 가 있다고 가정해 보겠습니다.ServiceLocator.dll그것은 오래된 버전의 유니티 어셈블리가 필요합니다, 이제 당신이 참조할 때.ServiceLocator당신은 그것을 유니티의 오래된 버전과 함께 제공해야 하며, 그것이 문제가 됩니다.

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

FusLogVw를 사용하여 이전 어셈블리를 로드하는 사용자를 확인하고 로그 경로를 정의한 후 솔루션을 실행한 다음(FusLogVw에서) Unity 어셈블리가 로드되는 첫 번째 줄을 확인하고 두 번 클릭하여 호출 어셈블리를 확인하면 됩니다.

IIS 관리자 열기

애플리케이션 풀 선택

그런 다음 사용 중인 풀을 선택합니다.

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

Enable 32bit application false 플래그를 true로 변경합니다.

다른 솔루션은 효과가 없었습니다(클린/재구축 전략 포함).Visual Studio를 닫았다가 다시 여는 다른 해결 방법을 찾았습니다.

이것은 Visual Studio가 솔루션과 모든 프로젝트를 다시 로드하여 프로세스의 종속성을 다시 확인하도록 강요하는 것 같습니다.

솔루션에서 디버그 및 릴리스 폴더를 정리합니다.그런 다음 유니티를 제거하고 다시 추가합니다.

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

  1. http://www.dependencywalker.com/ 에서 Dependency Walker 다운로드

  2. Dependency Walker를 시작하고 dll을 엽니다(내 경우).NativeInterfaces.dll)

  3. 빨간색 오류 파일 열기...에서 오류가 발생한 하나 이상의 dll을 볼 수 있습니다.

  1. 에 이합니다. 이름은 이, 이 dll 파일입니다. 경 dll 파일입니다.MSVCR71.DLL

  2. 할 수 에는 을구에누 DLL나운로올여경수있복다습니경우사할의로로른바글하서드락다된나▁(▁you▁in▁from경).c:\windows\system32)

  3. 이때 GAC(Global Assembly Cache)에 새 dll을 등록해야 합니다. DOS 터미널을 열고 다음과 같이 기록합니다.

     cd \Windows\System32
     regsvr32 /i msvcr71.dll
    
  4. 응용 프로그램 다시 시작

원래 질문이 5년 전에 게시되었음에도 불구하고, 그 문제는 여전히 지속되고 있고 오히려 성가신 일입니다.

일반적인 솔루션은 참조된 모든 어셈블리를 철저하게 분석하여 무엇이 잘못되고 있는지 파악하는 것입니다. 하기 .visual Studio 확장자를할 수 .(NET 조립품(a).dll또는.exe된 referencesfile을 표시하면서 다음과 같이 .

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

출력 예:

저는 팔로잉이 효과가 있었습니다.

  • 임시 파일 제거 C:\Windows\Microsoft.NET 프레임워크\v4.0.30319\임시 ASP.NET 파일
  • VST를 닫았다가 다시 열기
  • 동일한 DLL 제거 및 추가(참고: 일치하는 동일한 버전 추가)

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>

또는 Enterprise Library를 최신 버전으로 업데이트하는 것이 좋습니다.

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

프로젝트의 Web.config/App.config 파일을 확인합니다.버전 번호가 올바른지 확인합니다.

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

이것은 저에게 효과가 있었습니다.

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 및 AssemblyInformationVersion의 차이점은 무엇입니까?

저도 이 끔찍한 오류를 발견했고 해결책을 찾았습니다...

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

1) , 2)

솔루션 이름을 마우스 오른쪽 버튼으로 클릭합니다.

4) , 5)

릴리스로 구성 변경

이것이 당신에게도 도움이 되기를 바랍니다.

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

  1. 도구 메뉴 열기 및 옵션 선택
  2. 옵션에서 프로젝트 및 솔루션/웹 프로젝트로 이동합니다.
  3. 수표를 use the 64bit version of IIS ...

여기에 이미지 설명 입력

  • 이동: 솔루션 -> 패키지
  • 고급 탭 클릭(페이지 아래 찾기)
  • 추가 어셈블리에 DLL을 추가합니다(이 방법으로 쉐어포인트에 외부 DLL을 추가할 수 있습니다).

이게 도움이 될지 모르겠습니다.

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

나의 경우 bin 폴더에 Unity라는 비참조 dll이 있었습니다.MVC3, 저는 비주얼 스튜디오에서 이것에 대한 참조를 검색하려고 했지만 성공하지 못했습니다. 그래서 제 솔루션은 너무 쉬워서 그 dll을 bin 폴더에서 삭제했습니다.

Riddhi M에게 감사합니다.저는 팔로잉이 효과가 있었습니다.

임시 파일 제거 C:\Windows\Microsoft.NET 프레임워크\v4.0.30319\임시 ASP.VSTS를 닫고 다시 열기 동일한 DLL 제거 및 추가(참고: 일치하는 버전을 동일하게 추가)

솔루션에 많은 프로젝트가 있다고 합니다. 우선 빌드 순서의 맨 위에 있는 프로젝트부터 시작하십시오.그것을 구축하도록 하고 일단 알아내면 나머지 부분에도 동일한 수정 사항을 적용할 수 있습니다.

솔직히, 당신은 아마도 당신의 참조를 새로 고치면 될 것입니다.버전을 업데이트하고 참조를 업데이트하지 않은 것처럼 들립니다. 또는 솔루션을 소스 제어 상태로 유지하는 경우 상대적인 경로 문제입니다.가정을 확인하고 참조를 다시 추가하십시오.

만약 당신이 윈도우 XP에서 애플리케이션을 열어서 이 오류 메시지를 받는다면, 그것은 먼저 당신이 넷 프레임워크 4와 서비스 팩 3 없이 작동하지 않기 때문에 그 앱을 설치했다는 것을 의미합니다. 당신은 이 오류를 다시 설치하고 다시 설치해야 하지만 먼저 추가 및 제거에서 제거해야 합니다.

만약 이것이 효과가 없다면 저를 학대하지 마세요. 저도 3학년입니다.

저는 팔로잉이 효과가 있었습니다.

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

이 문제는 상위 라이브러리가 "x64"의 컴파일을 예상할 때 종속 라이브러리 중 하나가 "Any CPU"로 DLL을 컴파일하는 경우에 발생했습니다.

저는 오늘 이것을 겪었고, 저의 경우 문제가 매우 이상했습니다.

  <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로 변경되었습니다!모든 것이 다시 작동했습니다.

VS를 제안대로 닫았다가 다시 열었지만 잘 되지 않았습니다.

혼합 플랫폼에서 모든 CPU변경해야 했습니다.

여기에 이미지 설명 입력

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

언로드/찾지 못한 라이브러리/프로젝트를 "시작 프로젝트로 설정"합니다.

그런 다음 배포했습니다.

효과가 있었어요!

.dll이 처음에는 어셈블리에 없어서 찾지 못한 것 같습니다.

또 다른 가능한 원인은 두 프로젝트에 실수로 동일한 어셈블리 이름이 프로젝트 속성에 지정되지 않았는지 확인하는 것입니다.

에 대한 나의 해결책.NET 4.0은 Enterprise Library 5를 사용하여 다음에 참조를 추가했습니다.

마이크로소프트.관행.Unity.Interception.dll

충돌하는 참조를 주의하십시오.새로 고치고 다시 만든 후에도 참조가 충돌하면 문제가 발생합니다.나의 문제는 A포지와 어코드 사이였습니다.저는 두 개의 참조를 모두 제거하고 특정 참조를 다시 선택하여 참조를 다시 추가했습니다(특히 제 경우에는 합의만).

저의 경우, 제안된 답변 중 어떤 것도 효과가 없었습니다.

다음은 저에게 도움이 되었습니다.

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

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

참조에 대한 "Copy to Local" 속성이 true로 설정되어 있고 특정 버전이 true로 설정되어 있는지 확인해 보십시오.이는 Visual Studio의 응용 프로그램과 관련이 있습니다.

언급URL : https://stackoverflow.com/questions/4469929/could-not-load-file-or-assembly-or-one-of-its-dependencies

반응형