【问题标题】:Including .NET assemblies in a VB6 manifest?在 VB6 清单中包含 .NET 程序集?
【发布时间】:2012-02-28 04:42:54
【问题描述】:

我正在开发一个 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): Automation error , Error in the Dll”

我在上面做的事情是否正确,任何人都有类似的经验,感谢任何帮助。

【问题讨论】:

标签: c# com vb6 manifest


【解决方案1】:

下面是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>
    

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

【讨论】:

  • 您好 wqw,现在 program.exe 清单似乎选择了 Client.dll 嵌入式清单。但是现在我在消息框中出现错误,上面写着:运行时错误'-2146234341'(8013101b)自动化错误。所以我认为这可能是与 client.dll 代码相关的问题,但是当我对 Client.dll 进行 regasm 时,program.exe 可以工作。 com Client.dll 使用并引用了 2 个其他 .net dll,.A.dll 和一个 B.dll,它们也与 program.exe 位于同一目录中。有什么想法吗?
  • 您是否将 Client.dll 所依赖的 Net dll 放在与 VB6 可执行文件 相同的文件夹中?您遇到的错误几乎可以肯定是一个简单的寻路错误。使用 fuslogvw.exe(来自 windows7.1 SDK)和 sxstrace.exe 解决此问题。
猜你喜欢
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多