ray*_*ode 6 c# vb6 com 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中出错"
我上面做的正确,任何人都有类似的经验,任何帮助赞赏.
以下是UMMM如何做到这一点的简短描述:
首先,对于 .Net dll,它会生成一个临时文件清单
mt.exe -nologo -managedassemblyname:"{dotnet_dll}" -nodependency -out:"{dotnet_dll}.manifest"
Run Code Online (Sandbox Code Playgroud)然后将此清单作为 RT_MANIFEST 资源 2 嵌入到 .Net dll 中
mt.exe -nologo -manifest "{dotnet_dll}.manifest" -outputresource:"{dotnet_dll}";2
Run Code Online (Sandbox Code Playgroud)最后,通过从 .Net dll 清单中提取assemblyIdentity标记并将其添加到标记内的无注册表清单中,从 VB6 可执行文件引用 .Net dll,dependency\dependentAssembly如下所示
<dependency>
<dependentAssembly>
<assemblyIdentity name="PdfSigner" version="1.0.0.0" processorArchitecture="msil" />
</dependentAssembly>
</dependency>
Run Code Online (Sandbox Code Playgroud)这样,clrClassHans 提到的标签就会出现在 .Net dll 嵌入清单中,而不是出现在 VB6 可执行清单中。