Похоже, что идеальное решение еще не существует. Суммировать некоторое исследование:
Делают Мою Декларацию ( ссылка )
, Этот инструмент сканирует проект VB6 искать зависимости COM, но это также поддерживает ручное объявление последних ограниченных зависимостей COM (т.е. используемые через CreateObject).
Интересно достаточно, этот инструмент помещает всю информацию о зависимостях в декларации приложения. Приложение exe и его зависимости описаны как единственный блок, состоящий из нескольких файлов. Я не понял прежде, который это было возможно.
Похож на очень хороший инструмент, но с версии 0.6.6 он имеет следующие ограничения:
я не протестировал, поддерживает ли это.NET com библиотеки.
regsvr42 ( ссылка codeproject )
Этот инструмент командной строки генерирует файлы манифеста для собственных библиотек COM. Это вызывает DllRegisterServer и затем шпионов на саморегистрации, поскольку это добавляет информацию в реестр. Это может также генерировать клиентскую декларацию для приложений.
Эта утилита не поддерживает библиотеки COM.NET, так как они не выставляют стандартную программу DllRegisterServer.
утилита записана в C++. Исходный код доступен.
mt.exe
Часть окон SDK (может быть загружен от MSDN), который Вы уже имеете, если Вам установили Visual Studio. Это зарегистрировано здесь . Можно генерировать файлы манифеста для собственных библиотек COM с ним как это:
mt.exe -tlb:mycomlib.ocx -dll:mycomlib.ocx -out:mycomlib.ocx.manifest
можно генерировать файлы манифеста для библиотек COM.NET с ним как это:
mt.exe -managedassemblyname:netlib.dll -nodependency -out:netlib.dll.manifest
Однако существуют некоторые проблемы с этим инструментом:
<runtime>
и <mvid>
элементы, которые должны быть разделены, прежде чем декларации на самом деле работают. , Возможно, будущие выпуски SDK улучшат этот инструмент, я протестировал тот в Windows SDK 6.0a (перспектива).
Сделать мою декларацию (MMM) является хорошим инструментом для того, чтобы сделать это. Также возможно записать сценарий для обработки всех файлов DLL/OCX с помощью mt.exe , чтобы генерировать декларацию для каждого и затем объединить их всех вместе. MMM обычно лучше/легче, потому что он также обрабатывает много специальных/странных случаев.
Вы можете использовать выделение Unattended Make My Manifest для генерации манифестов непосредственно в автоматизированных сборках. Он использует файл сценария для добавления зависимых компонентов COM. Это отрывок из примера ini с доступными командами:
# Unattended MMM script
#
# Command names are case-insensitive. Reference of supported commands:
#
# Command: Identity
#
# Appends assemblyIdentity and description tags.
#
# Parameters <exe_file> [name] [description]
# exe_file file name can be quoted if containing spaces. The containing folder
# of the executable sets base path for relative file names
# name (optional) assembly name. Defaults to MyAssembly
# description (optional) description of assembly
#
# Command: Dependency
#
# Appends dependency tag for referencing dependent assemblies like Common Controls 6.0,
# VC run-time or MFC
#
# Parameters {<lib_name>|<assembly_file>} [version] [/update]
# lib_name one of { comctl, vc90crt, vc90mfc }
# assembly_file file name of .NET DLL exporting COM classes
# version (optional) required assembly version. Multiple version of vc90crt can
# be required by a single manifest
# /update (optional) updates assembly_file assembly manifest. Spawns mt.exe
#
# Command: File
#
# Appends file tag and collects information about coclasses and interfaces exposed by
# the referenced COM component typelib.
#
# Parameters <file_name> [interfaces]
# file_name file containing typelib. Can be relative to base path
# interfaces (optional) pipe (|) separated interfaces with or w/o leading
# underscore
#
# Command: Interface
#
# Appends comInterfaceExternalProxyStub tag for inter-thread marshaling of interfaces
#
# Parameters <file_name> <interfaces>
# file_name file containing typelib. Can be relative to base path
# interfaces pipe (|) separated interfaces with or w/o leading underscore
#
# Command: TrustInfo
#
# Appends trustInfo tag for UAC user-rights elevation on Vista and above
#
# Parameters [level] [uiaccess]
# level (optional) one of { 1, 2, 3 } corresponding to { asInvoker,
# highestAvailable, requireAdministrator }. Default is 1
# uiaccess (optional) true/false or 0/1. Allows application to gain access to
# the protected system UI. Default is 0
#
# Command: DpiAware
#
# Appends dpiAware tag for custom DPI aware applications
#
# Parameters [on_off]
# on_off (optional) true/false or 0/1. Default is 0
#
# Command: SupportedOS
#
# Appends supportedOS tag
#
# Parameters <os_type>
# os_type one of { vista, win7 }. Multiple OSes can be supported by a single
# manifest
#
Он будет работать в 32- или 64-битной Windows.