Выпуск новой версии Tlb и когда Tlb должен быть повторно ссылаться - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть C # dll и я сгенерировал tlb с помощью regasm.Я дал электронную таблицу утилит пользователям, которые используют этот tlb.TLB не регистрируется и регистрируется (используя regasm.exe) каждый раз, когда выпускается новая версия нашего приложения.

Однако иногда, когда пользователь использует электронную таблицу после нового выпуска, он выдает 'activex'компонент не может создать ошибку экземпляра, именно в той строке кода, где я создаю объект типа.Я исправляю это просто, удаляя и добавляя ссылку tlb обратно.(В vba mode-tools-reference-снимите флажок с tlb-save-и снова добавьте).Однако это болезненно, поскольку я не могу сделать это для всех пользователей.

Я провел несколько тестов, чтобы повторить сценарий.Как изменение номера версии DLL и перерегистрация, добавление новых методов в интерфейсы и перерегистрация.Но во всех случаях электронная таблица работает нормально без необходимости удаления и повторного добавления ссылки tlb.

Итак, я не понимаю, какой может быть сценарий, когда tlb должен быть повторно добавлен как ссылка вэлектронные таблицы и что может быть вероятной причиной этого.Любая помощь приветствуется.

Спасибо, Мани

1 Ответ

2 голосов
/ 13 марта 2012

Скорее всего, проблема вызвана тем, что UUID библиотеки типов изменяется и ссылка в VBA становится недействительной.

1) Там есть парень, который написал программу VBA для добавления ссылок TLB и удаления недействительных !

2) Это может быть связано с тем, что вы сначала удаляете старую версию, а затем устанавливаете новую. Руководство RegAsm упоминает обратный порядок. Существует вероятность того, что VBA имеет некоторую логику для автоматического обновления их g , что будет работать только с порядком обновления, который имел в виду M $.
Другая возможность состоит в том, что Excel работал во время обновления, поэтому он не обновлял свой список ссылок, когда предполагалось.

3) Для дальнейшей диагностики проблемы я бы использовал procmon.exe. Все о COM ищется в реестре, поэтому в случае ошибок вы, вероятно, столкнетесь с неспособностью приложения найти какой-либо UUID-ключ.

...