파일이나 어셈블리 또는 해당 종속성 중 하나를로드 할 수 없습니다. 접근이 금지되어있다. 문제는 무작위이지만 한 번 발생하면 계속됩니다.


81

이 오류에 대한 많은 정보를 찾았습니다. '오류 : 파일 또는 어셈블리'* .dll '또는 해당 종속성 중 하나를로드 할 수 없습니다. 접근이 금지되어있다.' 하지만 내 시나리오에 특정한 답을 찾지 못했습니다. 내 사이트는 6 개의 서로 다른 프로덕션 서버에 배포되며 하나의 서버에만이 문제가 있습니다. 문제는 무작위이지만 한 번 발생하면 web.config 파일에서 약간의 수정을 수행하여 사이트가 다시 컴파일 될 때까지 계속됩니다 (web.config에서 수정 한 후 웹 응용 프로그램을 다시 컴파일합니다) 및 해당 서버에서 사이트 시작 일. 어제 한 달간 작업 한 후 문제가 재현되었습니다. 우리는 생산에이 문제를 감당할 수 없습니다.
문제 세부 정보 :

'/'응용 프로그램에 서버 오류가 있습니다. ____________________________________ 파일 또는 어셈블리 'MainCore.DbImpl, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null'또는 해당 종속성 중 하나를로드 할 수 없습니다. 접근이 금지되어있다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 오류가 발생한 위치에 대한 자세한 내용은 스택 추적을 검토하십시오.

예외 정보 : System.IO.FileLoadException : 파일 또는 어셈블리 'MainCore.DbImpl, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null'또는 해당 종속성 중 하나를로드 할 수 없습니다. 접근이 금지되어있다.

소스 오류 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다. 아래의 예외 스택 추적을 사용하여 예외의 출처 및 위치에 대한 정보를 식별 할 수 있습니다.

어셈블리로드 추적 : 다음 정보는 'MainCore.DbImpl, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null'어셈블리를로드 할 수없는 이유를 확인하는 데 도움이 될 수 있습니다.

WRN : 어셈블리 바인딩 로깅이 꺼져 있습니다. 어셈블리 바인딩 실패 로깅을 사용하려면 레지스트리 값 [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD)를 1로 설정하십시오. 참고 : 어셈블리 바인딩 실패 로깅과 관련된 성능 저하가 있습니다. 이 기능을 해제하려면 레지스트리 값 [HKLM \ Software \ Microsoft \ Fusion! EnableLog]를 제거하십시오.

스택 추적 :

[FileLoadException : 파일 또는 어셈블리 'MainCore.DbImpl, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null'또는 해당 종속성 중 하나를로드 할 수 없습니다. 액세스가 거부되었습니다.] ... root \ SportChannel의 ... DbImpl.Event.TTCEventController.GetEventFields (Int32 eventId) +0 WebSuite.SportChannel.ModelImpl.TTCModelController.AddEventFieldList (XmlElement eventNode, ITTCEventController ctrl, Int32 eventId, PlayerType stupidType) \ ModelImpl \ Ttc \ TTCModelController.cs : 171 ... root \ SportChannel \ ModelImpl \ Ttc \ TTCModelController.cs : 283의 ... ModelImpl.TTCModelController.GetLatestFourTourSchedulesXml () ... WebRoot.UserControls.HeadlinesTab.Page_Load (개체 발신자 , EventArgs e) +491 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o, Object t, EventArgs e) +25 System.Web.Util.
____________________________________

버전 정보 : Microsoft .NET Framework 버전 : 2.0.50727.5446; ASP.NET 버전 : 2.0.50727.5420


이 문제는 새 버전의 dll을 업로드하여 발생 했습니까?
nunespascal

변화 없음, 모든 서버에서 동일한 오래된 DLL, 아무것도 변화
khawarPK

모든 서버에서 동일한 이전 버전의 MainCore.DbImpl.dll은 아무것도 업로드하거나 변경하지 않았습니다.
khawarPK

다음에이 문제가 발생할 때 임시 ASP.Net 파일을 정리 / 삭제 해보십시오. bcoz를 사용하면 IIS를 다시 시작해야 할 수도 있습니다.
Furqan Hameedi

이 서버에서 다음에이 문제가 발생하지 않도록하려면 어떻게해야합니까 ??
khawarPK

답변:


51

내 시나리오의 경우 web.config 파일에 ID 노드가 있음을 발견했습니다.

<identity impersonate="true" userName="blah" password="blah">

노드에서 userName 및 password 매개 변수를 제거하면 작동하기 시작했습니다.

또 다른 옵션은 지정된 userName이 다양한 C : \ Windows \ Microsoft.NET \ Framework {version} 폴더에있는 "Temporary ASP.NET Files"폴더에 대한 작업에 액세스 할 수 있는지 확인해야하는 것입니다.

이것이 다른 사람을 도울 수 있기를 바랍니다!


2
나에게 솔루션을 로컬로 실행한다는 것은 web.config에서 ID 노드를 완전히 제거하는 것을 의미하지만 프로덕션 서버에 배포하려면 가장이 필요하므로 ID 노드를 추가해야합니다. 자세한 내용 여기 내 대답을 참조하십시오
bkwdesign

3
사용할 "다양한 프레임 워크 폴더"를 정확히 찾으려는 대신 IIS_IUSRS라는 로컬 그룹에 가장 사용자를 추가했습니다.
Andreas Jansson 2015 년

내 경우에는 사용자 (익명 로그온)가 Chrome 브라우저에 저장되어있는 경우 코드 (web.config없이) 를 통해 가장을 수행 할 수 있다는 것을 잊지 마십시오 . Chrome을 다시 시작하고 웹 사이트를 다시 방문하여 사용자 자격 증명을 입력해야했습니다.
Volodymyr Kotylo

36

동일한 문제가 있었지만 "32 비트 응용 프로그램 사용" 매개 변수 를 "true"로 설정하여 수정했습니다 (iis 응용 프로그램 풀의 고급 설정에서).


이 답변은 Love Chopra의 솔루션 과 함께 저에게 효과적 이었습니다.
Case 303

좋은 대답입니다! 저처럼 Azure에 게시하려고하는데 동일한 오류가 발생하는 경우 Azure Portal의 앱으로 이동하고 애플리케이션 설정으로 이동 한 다음 "플랫폼"설정에 대해 "64 비트"옵션을 선택합니다.
MV23

@ MV23 왜 64 비트인가? 그게 왜 도움이 되나요?
nmit026 19

26

내 솔루션은 다음과 같습니다.

에서 루트 폴더를 찾지 못했습니다 C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files.

Google은 현재 사용자에 대한 권한 문제 일 수 있다고 말한 다음 현재 ID가 있음을 발견 IIS APPPOOL했습니다. 서버의 나머지 부분에 현재 ID 가있는 오작동하는 서버에서 NT AUTHORITY\NETWORK SERVICE.

그런 다음 Current Identity를 IIS APPPOOL에서 NT AUTHORITY\NETWORK SERVICE.

여기에서 웹 앱을 재설정하면 임시 ASP.NET 캐시가 다시 작성되어 문제가 해결된다는 것을 알았습니다.


C1.Web.Wijmo.Controls.4 어셈블리와 동일한 문제에 대한 해결책이 있습니까? 점점Could not load file or assembly 'C1.Web.Wijmo.Controls.4, Version=4.0.20163.250, Culture=neutral, PublicKeyToken=9b75583953471eea' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Prajwal 바트

@Bhat : 당신의 문제는 완전히 다른 문제입니다. 오류 메시지를 비교하십시오.
JensG

22

대부분의 솔루션을 시도했지만 여전히 문제가있는 다른 사람에게.

내 솔루션은이 게시물의 맨 아래에있는 다른 솔루션과 다르지만 시도하기 전에 다음 목록을 모두 사용했는지 확인하십시오. 확실히, 나는 그들 모두를 시도했지만 아무 소용이 없습니다.

  1. 처음부터 다시 컴파일하고 재배포하고 기존 앱을 업데이트하지 마세요. 그래서 대답

  2. IIS_IUSRS에게 "C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files" 디렉터리에 대한 전체 액세스 권한을 부여합니다 .

    사용중인 프레임 워크 버전을 기억하십시오. 앱에서 가장을 사용하는 경우 IIS_IUSRS 대신 해당 ID를 사용하십시오.

  3. "C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files" 디렉토리의 모든 내용을 삭제합니다 .

    사용중인 프레임 워크 버전을 염두에 두십시오.

  4. 앱에서 사용중인 AppPool의 ID를 ApplicatonPoolIdentity에서 NetworkService로 변경하십시오.

    IIS> 애플리케이션 풀> 현재 앱 풀 선택> 고급 설정> ID.

    그래서 대답 (작동하지 않으면 기본값으로 복원하십시오)

  5. 앱과 IIS 버전 및 AppPool .NET 버전 호환성을 확인하십시오. 최초 배포에 매우 적합합니다. 그래서 대답

  6. 해당되는 경우 가장 구성을 확인합니다. 그래서 대답

내 솔루션 :

특정 안티 바이러스 소프트웨어가 "Temporary ASP.NET Files" 디렉토리 내의 DLL 컴파일을 적극적으로 차단하고 있다는 사실을 알게되었습니다 . 저의 경우 McAfee였습니다. IT 담당자는 설치 사실을 알려주지 못했습니다.

McAfee 전문가와 Microsoft의 조언 에 따라 실시간 검색에서 "Temporary ASP.NET Files" 디렉터리를 제외해야합니다 .

출처 :

안티 바이러스는 작업 만 수행하므로 비활성화하지 마십시오. \ Temporary ASP.NET Files {project name} 디렉토리에 누락 된 DLL 파일을 수동으로 복사하지 마십시오 . 이는 덕트 테이핑이기 때문입니다.


오류가 내 로컬 저장소 만 (반복적으로) 참조하더라도 임시 ASP.Net 파일을 지우면 효과가있었습니다. 매우 혼란 스럽습니다.
dudeNumber4

1
대단히 감사합니다. 저는 거의 2 주 동안이 성가신 오류와 싸우고 있습니다. 바이러스 백신 (BitDefender Free Antivirus)을 비활성화하면 모든 것이 다시 정상적으로 작동합니다.
Alexandre Perez

1
6 개월 정도마다 저를이 같은 SO 답변으로 다시 보내는 오작동하는 개발 배포가 있습니다. @Yorro !. 다시 말하지만, 내 가장 사용자가 Temporary ASP.NET Files dir에 대한 액세스 권한을 필요로했지만 IIS (기본 파일이 아님)에서 내 응용 프로그램을 삭제하고 응용 프로그램을 IIS로 다시 가져옵니다.
bkwdesign 2015

제 경우에는 McAfee가 McAfee의 로그에서 볼 수 있듯이 제 .Net 응용 프로그램의 dll에 대한 액세스를 차단하고 있음을 발견했습니다. McAfee의 "액세스 보호"로 이동하여 "스파이웨어 방지 최대 보호"를 변경해야했습니다. 그런 다음 "모든 프로그램이 Temp 폴더에서 파일을 실행하지 못하도록 방지"라는 항목에 대한 차단 검사를 제거합니다. 비활성화하는 대신 구성 할 수 있습니다. AccessProctectionLog.txt에서 차단 또는보고중인 메시지를 확인합니다. 로그 위치는 보고서 탭 페이지에 있습니다.
Paul Syfrett

.NET 에서 IIS Express 를 사용하면 오류가 발생 development environment합니다. AppPools 에 대한 동일한 문제 .
Kiquenet

5

가장을 사용 하는 경우 다음 폴더의 관련 사용자 계정에 쓰기수정 권한을 포함한 권한을 부여해야 합니다.

C:\Users\[username]\AppData\Local\Temp\Temporary ASP.NET Files

수정 권한이 없어서 기본 권한을 추가하는 것만으로도 효과가 없었습니다.


선택한 답변에서 더 복잡한 단계 대신이 단계 만 따랐으며 이것만으로 해결되었습니다.
Veverke 2015

이것은 나에게도 효과적이었습니다. Technet 의 Sysinternal의 Process Monitor를 사용 하여 차단 된 폴더를 찾았습니다. 차단 된 폴더는 언급 된 "Temporary ASP.NET Files"폴더였습니다. 프로세스 모니터에서 "파일 시스템 활동"단추를 제외한 모든 항목을 끄고 "액세스 거부"를 검색 할 수 있습니다.
Fordy 2015

4

여전히 문제가 발생하면 다음을 시도하십시오.

IIS 관리자 열기-> 응용 프로그램 풀-> 앱 풀 선택-> 고급 설정-> '프로세스 모델'에서 '사용자 프로필로드'설정을 True로 설정합니다.

여기에 이미지 설명 입력


이 답변은 Fragment의 솔루션 과 함께 저에게 효과적이었습니다.
Case 303

4

나는 그것을 조사하는 데 1 일처럼 낭비되었다고 생각하며 이것이 내가 얻은 것입니다.

프레임 워크가이 위치에서 DLL에 액세스하고 Temporary Asp.Net 폴더에 배치하므로 가장 사용자를 솔루션의 디버그 폴더에 추가해야합니다.

따라서 기본적으로 다음 두 단계를 따르십시오.

  1. 아래의 Temporary Asp.Net Folder에 대한 권한을 부여 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files하고 여기에 추가하는 사용자가 가장하는 동안 사용하는 것과 동일한 지 확인하십시오.

  2. 솔루션 YourSolutionPath .. \ bin \ Debug의 디버그 폴더에 가장 사용자를 추가하십시오.

이것은 작동합니다


3

모든 종속 Dll 파일을 다시 빌드하고 다시 배포하여 동일한 문제가 발생했습니다.


3

제 경우에는 안티 바이러스 (McAfee)의 액세스 보호 기능 때문이었습니다. 그러한 오류로 인해 분명히이 파일에 대한 액세스를 차단했습니다.

나는 그것을 비활성화하고 솔루션이 실행되었습니다. 일부 파일에 대한 액세스에 영향을 줄 수있는 실행중인 유틸리티 응용 프로그램을 확인할 수 있습니다.


McAfee의 "액세스 보호"로 이동하여 "스파이웨어 방지 최대 보호"를 변경해야했습니다. 그런 다음 "모든 프로그램이 Temp 폴더에서 파일을 실행하지 못하도록 방지"라는 항목에 대한 차단 검사를 제거합니다. 비활성화하는 대신 구성 할 수 있습니다.
Paul Syfrett 2015

3

IIS-> 응용 프로그램 풀-> 고급 설정-> 32 비트 응용 프로그램 활성화로 이동합니다.


당신은 아름다움 !! 나에게 문제의 worldddd를 구했다
Murphybro2

2

IIS 설정을 확인하십시오. .NET 프레임 워크 내에서 32 비트 또는 64 비트 컴파일과 함께 IIS 7.5를 사용합니다. 32 비트 모드를 사용하는 앱이있는 경우 32 비트 명령을 사용할 수 있도록 앱 풀을 활성화해야합니다. 그렇지 않으면 보안을 아무리 설정하거나 DLL을 강력하게 서명해도 작동하지 않는 것 같습니다.


2

새 서버에 환경을 설정하고 있습니다. 내 web.config에 아래와 같은 ID 노드가 있습니다. "파일이나 어셈블리 또는 해당 종속성 중 하나를로드 할 수 없습니다. 액세스가 거부되었습니다. 문제는 무작위이지만 한 번 발생하면 계속됩니다."

새 서버의 사용자 목록으로 ccs \ HJKWeb을 추가했습니다.

  <authentication mode="Windows" />
        <identity impersonate="true" password="******" userName="ccs\HJKWeb" />

2

나를 위해 다음 해킹이 작동했습니다. IIS-> 응용 프로그램 풀-> 고급 설정-> 프로세스 모델-> 기본 제공 계정 (ApplicationPoolIdentity)에서 사용자 지정 계정 (내 도메인 사용자)으로 변경된 ID로 이동합니다.


1

제 경우에는 가장을 사용하지 않았습니다. 내 솔루션은 사용자 그룹 "IIS_IUSRS"에 대해 내 프로젝트 디렉터리에 대한 전체 액세스 권한을 부여하는 것이 었습니다.



1

이 문제가 발생하여 참조 된 패키지 / 어셈블리가 Windows에 의해 암호화되는 것으로 나타났습니다. 이것은 우리 회사가 내 문서 폴더를 암호화하도록 요구하는 정책을 구현했고 내 Visual Studio 솔루션이 해당 디렉터리 아래에 있었기 때문에 발생했습니다.

수동으로 Windows 탐색기의 파일 / 디렉터리 속성으로 이동하여 암호화를 비활성화 할 수 있습니다. 그러나 제 경우에는 네트워크 정책이 결국 다시 변경하므로 일시적인 해결책이었습니다. 내 VS 솔루션을 암호화되지 않은 다른 위치로 이동했습니다.


1

제 경우에는 Visual Studio에서 적절한 배포를 수행하지 않고 한 서버에서 다른 서버로 서비스를 복사했습니다. 긴 이야기.

어쨌든 적절한 NTFS 권한과 기타 권한을 모두 설정했지만 여전히 서비스의 기본 DLL을로드 할 수 없습니다.

해당 service.pdb 파일의 이름을 다른 것으로 변경하여 수정했습니다.

예를 들어 여기에 내 bin 폴더가 있습니다. \bin\ service.dll service.dll.config service.pdb service.pdb의 이름을 zzservice.pdb로 변경 한 다음 service.dll이 제대로로드되었습니다.


문제가 해결되었을 수 있지만 원인을 설명하지 못함
롤백

1

액세스 거부 대신 DLL을 찾을 수없는 경우 적절한 VC ++ 재배포 가능 패키지가 설치되어 있는지 확인하십시오.


0

이 오류는 VS에서 실행 중입니다. Visual Studio를 관리자로 실행하지 않고 솔루션을 열었습니다. Visual Studio를 닫고 관리자로 다시 실행 한 다음 다시 빌드하면이 문제가 해결되었습니다.

누군가에게 도움이되기를 바랍니다.


0

제 경우에는 단순한 가장을 사용하고 있었고 가장 사용자가 프로젝트 어셈블리 중 하나에 액세스하는 데 문제가있었습니다. 내 솔루션 :

  1. 문제가있는 어셈블리를 식별하려면 내부 예외 메시지를 찾으십시오.
  2. 어셈블리 파일의 보안 속성을 수정합니다.

    a) 가장에 사용중인 사용자 계정을 그룹 및 사용자 이름에 추가합니다.

    b) 해당 사용자 계정에 어셈블리 파일에 대한 전체 액세스 권한을 부여합니다.

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