C # - зарегистрируйте стороннюю COM DLL во время события перед сборкой - PullRequest
1 голос
/ 18 мая 2011

У меня есть зависимость от нескольких компонентов COM. Мой проект управляется. Я хочу убедиться, что самая последняя версия COM DLL зарегистрирована до сборки. Я добавил вызовы regsvr32 для DLL на этапе предварительной сборки, но он никогда не работает правильно. Когда проект построен, он жалуется, что тип не зарегистрирован. У меня есть как изолированные, так и неизолированные компоненты.

Как люди справляются с этой ситуацией? Является ли regsvr32 единственным ответом? Почему MSBuild не замечает, что типы были зарегистрированы?

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Regsvr32 - это способ зарегистрировать информацию о вашем typelib и COM-сервере в реестре. Это тривиальный процесс, и я удивлен, что он не работает. Проверяли ли вы вручную этот процесс, чтобы убедиться, что он не является чем-то другим, например, указав неправильный путь к regsvr32?

0 голосов
/ 18 мая 2011

Я решил эту проблему, вызвав пакетный скрипт:

$(ProjectDir)register.bat "$(SolutionDir)"

Пакетная:

regsvr32 "%~1ThirdParty\comdll1.dll" /s
if %ERRORLEVEL% NEQ 0 GOTO Exit
regsvr32 "%~1ThirdParty\comdll2.dll" /s
if %ERRORLEVEL% NEQ 0 GOTO Exit
regsvr32 "%~1ThirdParty\comdll3.dll" /s
EXIT:

Проблема в том, что Visual Studio может проверить значение ERRORLEVEL только один раз, в конце. Если comdll2 не удалось зарегистрировать, но comdll3 успешно, ERRORLEVEL будет 0 и сборка не будет завершена.

...