Включая сборки .NET в манифест VB6? - PullRequest
6 голосов
/ 06 февраля 2012

Я работаю над проектом vb6 и хочу создать манифест, поэтому регистрация не требуется.

Я использую инструмент MMM (Make My Manifest), который сканирует ваш проект VB6 на наличие зависимостей dll и генерирует манифест.

Однако MMM не включает файлы tlb, и у меня есть Client.dll и Client.tlb, написанные в .net, которые были открыты для COM и использовались в моей программе VB6.

Я не использую Regasm, поскольку было бы неплохо, если бы регистрация в реестре не производилась.

Я попытался сгенерировать отдельный манифест для инструмента через mt в командной строке: 'mt.exe -tlb: Client.tlb -dll: Client.dll -out: Client.manifest'

Тогда я подумал, что могу объединить манифест 2 с помощью: 'mt.exe -manifest program.exe.manifest client.manifest -out: program.exe.manifest'

Однако, когда я запускаю программу, я получаю окно с сообщением «Ошибка времени выполнения -2147220999 (800401f9): Ошибка автоматизации, Ошибка в Dll»

Правильно ли я делаю выше, у кого-то был подобный опыт, любая помощь приветствуется.

1 Ответ

4 голосов
/ 09 февраля 2012

Вот краткое описание того, как UMMM делает это:

  1. Во-первых, для .Net dll генерирует манифест во временный файл с этим

    mt.exe -nologo -managedassemblyname:"{dotnet_dll}" -nodependency -out:"{dotnet_dll}.manifest"
    
  2. Затем встраивает этот манифест в dll .Net как ресурс RT_MANIFEST 2 с этим

    mt.exe -nologo -manifest "{dotnet_dll}.manifest" -outputresource:"{dotnet_dll}";2
    
  3. Наконец ссылается на dll .Net изИсполняемый файл VB6, извлекая тег assemblyIdentity из манифеста .Net dll и добавляя его в безрегрессный манифест внутри тега dependency\dependentAssembly следующим образом

    <dependency>
        <dependentAssembly>
            <assemblyIdentity name="PdfSigner" version="1.0.0.0" processorArchitecture="msil" />
        </dependentAssembly>
    </dependency>
    

Таким образом clrClass тегиУпоминания Ханса появляются во встроенном манифесте .Net dll, а не в исполняемом манифесте VB6.

...