Устранение неполадок: разрешение сборки для управляемой библиотеки DLL из надстройки Word VSTO - PullRequest
2 голосов
/ 09 декабря 2008

У меня есть документ Word VSTO с dll с кодовым названием WordDocument1.dll

Папка проекта D: \ Work \ Seven \ WordAutomation \ ContentControls \ WordDocument1 \ bin \ Debug
Я скопировал некоторый пользовательский код в папку MyAppExecs под этим. В библиотеке DLL указан путь к частной корзине, поэтому код в MyAppExecs доступен.

Итак, при запуске я загружаю Starter.DLL в папку MyAppExecs, которая должна открыть диалоговое окно, что и происходит. Однако, нажав на кнопку в диалоговом окне, необходимо загрузить X.DLL, которая имеет неуправляемые зависимости. (X.DLL имеет некоторый управляемый C ++, имеет некоторые библиотеки, указанные как дополнительные зависимости. X - без знака и частная сборка, а не в GAC)

X.DLL, однако, не может быть решена. Из инструмента fuslogvw я вижу, что он пытается загрузить эту DLL в папку Office12 и не может . У меня также работает ProcMon, однако он не показывает какие-либо неуправляемые файлы зависимостей не найдены ошибки.

  • Как сделать исполняемый файл Word видимым X.Dll, который присутствует в D: \ Work \ Seven \ WordAutomation \ ContentControls \ WordDocument1 \ bin \ Debug?

Также кажется странным, что он может загружать Starter.DLL и массу других без проблем в {ProjFolder} \ MyAppExecs, но не может видеть файлы в {ProjFolder}.

Вот вывод fuslogvw

*** Assembly Binder Log Entry  (12/9/2008 @ 6:10:06 PM) ***

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

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  C:\Program Files\Microsoft Office\Office12\WINWORD.EXE
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = GEIPS-EURO\PillaiGi
LOG: DisplayName = MyNamespace.X, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5574221fffc7dcd4
 (Fully-specified)
LOG: Appbase = file:///C:/Program Files/Microsoft Office/Office12/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: MyNamespace.X, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5574221fffc7dcd4
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Program Files/Microsoft Office/Office12/MyNamespace.X.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Microsoft Office/Office12/MyNamespace.X/MyNamespace.X.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Microsoft Office/Office12/MyNamespace.X.EXE.
LOG: Attempting download of new URL file:///C:/Program Files/Microsoft Office/Office12/MyNamespace.X/MyNamespace.X.EXE.
LOG: All probing URLs attempted and failed.

Обновление # 1 : Устранен симптом, но не удалось определить причину проблемы. Я загрузил сборку вручную через Assembly.load. Однако вышеупомянутая ошибка разрешения сборки продолжала регистрироваться, и это не работало. Наконец, в отчаянии, я скопировал свои библиотеки Word-проекта в {ProjFolder} \ MyAppExecs так, чтобы все библиотеки DLL были в одной папке, и она начала работать.

Похоже, что некоторые неуправляемые зависимости X.dll не разрешаются при запуске из {ProjFolder} ... однако ProcMon не показывает никаких признаков этого. Также обновлена ​​переменная PATH, чтобы включить {ProjFolder} \ MyAppExecs, но не повезло. Так что копирование всего в одну папку - вот что сработало. X.dll - это NotMyCode, поэтому я больше не могу исследовать его, и у меня была более крупная рыба Вот и все.

...