Почему моя программа не ищет сборку в GAC?

У меня есть служба, которая загружает кучу сборок в виде плагинов. Каждый из этих подключаемых модулей ссылается на общую сборку, установленную в GAC. По какой-то причине некоторые плагины могут успешно загрузить сборку из GAC, а другие — нет. Кажется, я не могу понять, почему это происходит. Вот журнал Fusion для одного, который работает, а для другого нет:

*** 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.

person Brian    schedule 03.12.2011    source источник
comment
Я предполагаю, что сборка строго подписана - как она была добавлена ​​​​в качестве ссылки на проект, который не может ее загрузить?   -  person Oded    schedule 03.12.2011
comment
Ссылка была добавлена ​​одинаково для обоих сценариев. Добавить ссылку -> Обзор -> выбрать dll   -  person Brian    schedule 03.12.2011
comment
Итак, вы вручную выбрали DLL из расположения файла? Или ссылку на проект? Или из GAC? Который из?   -  person Oded    schedule 03.12.2011
comment
Я вручную выбираю DLL из расположения файла   -  person Brian    schedule 03.12.2011
comment
Была ли добавлена ​​ссылка с PublicKeyToken?   -  person Oded    schedule 03.12.2011
comment
Я не уверен, как это будет сделано. он показывает в fuslogvw, что PublicKeyToken является нулевым для тех, которые не удалось   -  person Brian    schedule 03.12.2011
comment
давайте продолжим обсуждение в чате   -  person Oded    schedule 03.12.2011


Ответы (1)


Неудачная сборка не имеет строгой подписи (PublicKey=null). Я не знаю, почему сборка не подписана, но загрузчику не нужно искать в GAC такую ​​сборку, так как только строго подписанные сборки могут попасть в GAC.

person Alexei Levenkov    schedule 03.12.2011