VSTO Assembly Решить вопрос

Мы разрабатываем плагин VSTO для Word, и у нас проблема в том, что самой ранней точкой входа надстройки является обработчик AddIn_Startup. Проблема в том, что этот обработчик вызывается слишком поздно для обработчика AssemblyResolve, который мы реализовали, чтобы найти необходимые сборки.

Я решил проблему, назначив обработчик событию AppDomain.CurrentDomain.AssemblyResolve в классе Addins.Designer.cs, но, как вы все знаете, этот код генерируется автоматически.

Есть ли способ назначить обработчик AssemblyResolve раньше, чем в обработчике AddIn_Startup и в не сгенерированном файле?

2 ответа

Помните, что вы разрабатываете надстройку, а не отдельное приложение, где вы можете управлять ссылками во время выполнения и делать все, что вам нужно. Вы можете добавить информацию о привязке в файл конфигурации приложения (в вашем случае это будет Word.exe.config).

Вы можете добавить обработчик в коде AddIn_Startup. Код есть в VB.net.

AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolver

У меня только что возникла эта проблема, я приземлился здесь после поиска, а затем осмотрел VSTO Microsoft.Tools AddinBase Class (надеюсь, это правильная ссылка). В любом случае я переопределяю Begininit и устанавливаю там AppDomain.CurrentDomain.AssemblyResolve. В моем случае это достаточно рано, чтобы загрузить мою ссылку.

Однако обратите внимание, что надстройка все еще может попытаться загрузить вашу сборку (и потерпеть неудачу), если она ему нужна, и это может произойти даже до Begininit. Например, если вы ссылаетесь на Enum или Const из своей сборки в классе ThisAddin.

Другие вопросы по тегам