在VB6清单中包括.NET程序集

本文关键字:NET 程序集 单中包 VB6 | 更新日期: 2023-09-27 18:22:37

我正在处理一个vb6项目,希望创建一个清单,因此不需要注册。

我使用MMM(Make My Manifest)工具扫描您的VB6项目的dll依赖项并生成清单。

然而,MMM不包括tlb文件,我有一个在.net中编写的Client.dll和Client.tlb,它已经公开给COM,并在我的VB6程序中使用。

我不建议你使用Regism,因为如果不注册就好了。

我试图通过命令行中的mt工具"mt.exe-tlb:Client.tlb-dll:Client.dll-out:Client.manifest"为生成一个单独的清单

然后我想我可以通过合并2个清单:"mt.exe-manifest program.exe.manifest client.manifest-out:program.exe.manfest"

然而,当我运行程序时,我会收到一个消息框,上面写着"运行时错误-2147220999(800401f9):自动化错误,Dll中的错误"

我以上做得对吗,任何有类似经历的人,任何帮助都表示感谢。

在VB6清单中包括.NET程序集

以下是UMMM如何做到这一点的简短描述:

  1. 首先,对于.Net dll,它使用这个生成一个临时文件的清单

    mt.exe -nologo -managedassemblyname:"{dotnet_dll}" -nodependency -out:"{dotnet_dll}.manifest"
    
  2. 然后将此清单作为RT_manifest资源2嵌入到.Net dll中

    mt.exe -nologo -manifest "{dotnet_dll}.manifest" -outputresource:"{dotnet_dll}";2
    
  3. 最后从VB6可执行文件中引用.Net dll,方法是从.Net dll清单中提取assemblyIdentity标签,并将其添加到dependency'dependentAssembly标签内的reg free清单中,如所示

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

通过这种方式,Hans提到的clrClass标记出现在.Net dll嵌入清单中,而不是VB6可执行清单中。