2011-12-03 3 views
1

나는 많은 어셈블리를 플러그인으로로드하는 서비스를 가지고있다. 각 플러그인은 GAC에 설치된 공통 어셈블리를 참조합니다. 어떤 이유로 인해 일부 플러그인은 GAC에서 어셈블리를 성공적으로로드 할 수 있지만 다른 어셈블리는 실패합니다. 나는 이것이 왜 일어날지를 알 수 없다. 여기에 작동 하나, 그의 퓨전 로그가없는 것입니다 :내 프로그램이 GAC에서 어셈블리를 찾지 않는 이유는 무엇입니까?

*** Assembly Binder Log Entry (12/3/2011 @ 10:54:47 AM) *** 



The operation was successful. 
Bind result: hr = 0x0. The operation completed successfully. 

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 
Running under executable C:\Windows\Microsoft.NET\Framework\v4.0.30319\AddInProcess.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: User = NT AUTHORITY\SYSTEM 
LOG: DisplayName = OSAE.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f47a6446f36f79f7 
(Fully-specified) 
LOG: Appbase = file:///C:/Program Files/OSA/AddIns/ZWave 
LOG: Initial PrivatePath = NULL 
LOG: Dynamic Base = NULL 
LOG: Cache Base = NULL 
LOG: AppName = NULL 
Calling assembly : OSAE.Zwave, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: This bind starts in default load context. 
LOG: No application configuration file found. 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: OSAE.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f47a6446f36f79f7 
LOG: Found assembly by looking in the GAC. 
LOG: Binding succeeds. Returns assembly from C:\Windows\Microsoft.Net\assembly\GAC_MSIL\OSAE.API\v4.0_1.0.0.0__f47a6446f36f79f7\OSAE.API.dll. 
LOG: Assembly is loaded in default load context. 

실패 :

*** Assembly Binder Log Entry (12/3/2011 @ 10:54:46 AM) *** 

The operation failed. 
Bind result: hr = 0x80070002. The system cannot find the file specified. 

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 
Running under executable C:\Windows\Microsoft.NET\Framework\v4.0.30319\AddInProcess.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: User = NT AUTHORITY\SYSTEM 
LOG: DisplayName = OSAE.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
(Fully-specified) 
LOG: Appbase = file:///C:/Program Files/OSA/AddIns/Web Server 
LOG: Initial PrivatePath = NULL 
LOG: Dynamic Base = NULL 
LOG: Cache Base = NULL 
LOG: AppName = NULL 
Calling assembly : OSAE.WebServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: This bind starts in default load context. 
LOG: No application configuration file found. 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). 
LOG: Attempting download of new URL file:///C:/Program Files/OSA/AddIns/Web Server/OSAE.API.DLL. 
LOG: Attempting download of new URL file:///C:/Program Files/OSA/AddIns/Web Server/OSAE.API/OSAE.API.DLL. 
LOG: Attempting download of new URL file:///C:/Program Files/OSA/AddIns/Web Server/OSAE.API.EXE. 
LOG: Attempting download of new URL file:///C:/Program Files/OSA/AddIns/Web Server/OSAE.API/OSAE.API.EXE. 
LOG: All probing URLs attempted and failed. 
+0

어셈블리가 강력하게 서명되었다고 가정합니다.이 어셈블리를로드하지 못한 프로젝트에 대한 참조로 어떻게 추가 되었습니까? – Oded

+0

두 시나리오 모두 동일한 방식으로 참조가 추가되었습니다. 참조 추가 -> 찾아보기 -> DLL 선택 – Brian

+0

그래서 파일 위치에서 수동으로 DLL을 선택 했습니까? 또는 프로젝트 참조? 아니면 GAC에서? 어느 것? – Oded

답변

2

실패 어셈블리는 강하게 서명되지 않은 (PublicKey의 = NULL). 어셈블리가 서명되지 않은 이유는 모르겠지만 로더가 강력한 어셈블리 만 GAC에 들어갈 수 있도록 어셈블리를 GAC에서 볼 필요가 없습니다.

관련 문제