Есть проблемы использования управляемого кода из Excel
От: RND80  
Дата: 08.08.06 10:59
Оценка:
Добрый день, помогите разобраться с проблемой

Имеется сборка InclMaker.exe (1), скомпилированная в VS8 и использующая Framework v2.0.50727

Имеется сборка ImpExcelBuffer.dll(2),которая должна получить некоторый тип из сборки 1, загрузив ее. Сборка 2

оформлена в виде СОМ-объекта ( для того, чтобы создаеть его из скрипта Excel )

Проблема заключается в том, что если сборка 2 сомпилирована в VS8 под Framework v2.0.50727, то при создании

COM-объекта из Excel происходит ошибка — сборка не найдена.

Просмотрев лог, увидел следующее:

*** Assembly Binder Log Entry (08.08.2006 @ 14:09:24) ***

The operation failed.
Bind result: hr = 0x80070002. Не удается найти указанный файл.

Assembly manager loaded from: E:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\fusion.dll
Running under executable E:\Program Files\Microsoft Office 2003\OFFICE11\EXCEL.EXE
--- A detailed error log follows.

=== Pre-bind state information ===
LOG: DisplayName = ImpExcelBuffer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2a3fd0cb75517b09
(Fully-specified)
LOG: Appbase = E:\Program Files\Microsoft Office 2003\OFFICE11\
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : (Unknown).
===

LOG: Processing DEVPATH.
LOG: DEVPATH is not set. Falling through to regular bind.
LOG: Attempting application configuration file download.
LOG: Download of application configuration file was attempted from file:///E:/Program Files/Microsoft Office

2003/OFFICE11/EXCEL.EXE.config.
LOG: Application configuration file does not exist.
LOG: Publisher policy file is not found.
LOG: Host configuration file not found.
LOG: Using machine configuration file from E:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\config\machine.config.
LOG: Post-policy reference: ImpExcelBuffer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2a3fd0cb75517b09
LOG: Cache Lookup was unsuccessful.
LOG: Attempting download of new URL file:///E:/Program Files/Microsoft Office 2003/OFFICE11/ImpExcelBuffer.DLL.
LOG: Attempting download of new URL file:///E:/Program Files/Microsoft Office

2003/OFFICE11/ImpExcelBuffer/ImpExcelBuffer.DLL.
LOG: Attempting download of new URL file:///E:/Program Files/Microsoft Office 2003/OFFICE11/ImpExcelBuffer.EXE.
LOG: Attempting download of new URL file:///E:/Program Files/Microsoft Office

2003/OFFICE11/ImpExcelBuffer/ImpExcelBuffer.EXE.
LOG: All probing URLs attempted and failed.


,а также:

*** Assembly Binder Log Entry (08.08.2006 @ 14:09:24) ***

The operation failed.
Bind result: hr = 0x80131107. No description available.

Assembly manager loaded from: E:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\fusion.dll
Running under executable E:\Program Files\Microsoft Office 2003\OFFICE11\EXCEL.EXE
--- A detailed error log follows.

=== Pre-bind state information ===
LOG: Where-ref bind. Location =

E:/WINDOWS/assembly/GAC_MSIL/ImpExcelBuffer/1.0.0.0__2a3fd0cb75517b09/ImpExcelBuffer.dll
LOG: Appbase = E:\Program Files\Microsoft Office 2003\OFFICE11\
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : (Unknown).
===

LOG: Processing DEVPATH.
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:///E:/WINDOWS/assembly/GAC_MSIL/ImpExcelBuffer/1.0.0.0__2a3fd0cb75517b09/ImpExcelBuffer.dll.
LOG: Assembly download was successful. Attempting setup of file:

E:\WINDOWS\assembly\GAC_MSIL\ImpExcelBuffer\1.0.0.0__2a3fd0cb75517b09\ImpExcelBuffer.dll
LOG: Entering run-from-source setup phase.
ERR: Error extracting manifest import from file (hr = 0x80131107).
ERR: Failed to complete setup of assembly (hr = 0x80131107). Probing terminated.

Похоже, используется загрузчик сборок предыдущей версии — v1.1.4322\fusion.dll (эта версия Framework

тоже установлена). В первом случае не может найти сборку в GAC, во втором не может прочитать ее манифест. Если я

создаю этот COM-объект из приложения на неуправляемом С++, то используется загрузчик нужной версии и все

работает. Я пробовал компилировать ImpExcelBuffer.dll на VC7 под v1.1.4322. В этом случае СОМ-объект из Excel

создается, но из него я не могу получить тип, который находится в сборке InclMaker.exe(v2.0.50727), т.к. не могу ее

загрузить — тоже не удается прочитать манифест.

Как можно решить эту проблему?Можно ли как — то обязать Excel использовать загрузчик сборок из Framework v2.0.50727?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.