Похоже, идеального решения еще не существует. Подводя итог некоторым исследованиям:
Make My Manifest ( ссылка )
Этот инструмент сканирует проект VB6 в поисках COM-зависимостей, но также поддерживает ручное объявление зависимых COM-зависимостей (то есть тех, которые используются через CreateObject).
Интересно, что этот инструмент помещает всю информацию о зависимостях в манифест приложения. Exe приложения и его зависимости описываются как одна сборка, состоящая из нескольких файлов. До этого я не осознавал, что это возможно.
Выглядит как очень хороший инструмент, но начиная с версии 0.6.6 он имеет следующие ограничения:
- только для приложений VB6, запускается
из файла проекта VB6. Позор, потому что
многое из того, что он делает, на самом деле не имеет ничего общего
с VB6.
- приложение в стиле мастера, а не
подходит для интеграции в сборку
процесс. Это не большая проблема, если ваш
зависимости не сильно меняются.
- бесплатное программное обеспечение без источника, рискованно полагаться на него, поскольку в любой момент оно может стать заброшенным.
Я не проверял, поддерживает ли он .NET com библиотеки.
regsvr42 ( ссылка на кодпроект )
Этот инструмент командной строки создает файлы манифеста для собственных библиотек COM. Он вызывает DllRegisterServer и затем следит за саморегистрацией, добавляя информацию в реестр. Он также может генерировать манифест клиента для приложений.
Эта утилита не поддерживает COM-библиотеки .NET, поскольку они не предоставляют процедуру DllRegisterServer.
Утилита написана на C ++. Исходный код доступен.
mt.exe
Часть пакета Windows SDK (можно загрузить с MSDN ), который у вас уже есть, если у вас установлена Visual Studio. задокументировано здесь .
Вы можете создать файлы манифеста для собственных COM-библиотек следующим образом:
mt.exe -tlb:mycomlib.ocx -dll:mycomlib.ocx -out:mycomlib.ocx.manifest
С его помощью вы можете сгенерировать файлы манифеста для .NET COM-библиотек следующим образом:
mt.exe -managedassemblyname:netlib.dll -nodependency -out:netlib.dll.manifest
Однако есть некоторые проблемы с этим инструментом:
- Первый фрагмент не будет генерироваться
Прогидные атрибуты, ломающие клиентов
которые используют CreateObject с progids.
- Второй фрагмент будет сгенерирован
<runtime>
и <mvid>
элементы
которые должны быть удалены перед
манифесты действительно работают.
- Генерация клиентских манифестов для
приложения не поддерживаются.
Возможно, будущие выпуски SDK улучшат этот инструмент, я протестировал его в Windows SDK 6.0a (vista).