在VB6清单中包含.NET程序集?

时间:2012-02-06 17:49:54

标签: c# com vb6 manifest

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

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

但是,MMM不包含tlb文件,我有一个用.net编写的Client.dll和Client.tlb,它已暴露给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 个答案:

答案 0 :(得分:4)

以下是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. 最后通过从.Net dll清单中提取assemblyIdentity标记并将其添加到dependency\dependentAssembly标记内的免注册清单中来引用VB6可执行文件中的.Net dll

    <dependency>
        <dependentAssembly>
            <assemblyIdentity name="PdfSigner" version="1.0.0.0" processorArchitecture="msil" />
        </dependentAssembly>
    </dependency>
    
  4. 这种方式clrClass标签汉斯提及出现在.Net dll嵌入式清单中,而不是出现在VB6可执行文件清单中。