Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否在VB6清单中包含.NET程序集?_C#_Com_Vb6_Manifest - Fatal编程技术网

C# 是否在VB6清单中包含.NET程序集?

C# 是否在VB6清单中包含.NET程序集?,c#,com,vb6,manifest,C#,Com,Vb6,Manifest,我正在处理一个vb6项目,希望创建一个清单,因此不需要注册 我使用MMM(生成清单)工具扫描VB6项目中的dll依赖项并生成清单 但是,MMM不包括tlb文件,我在.net中编写了一个Client.dll和Client.tlb,它已公开给COM并在VB6程序中使用 我不希望您使用Regasm,因为如果没有注册到注册表,那就太好了 我试图通过命令行中的mt工具为生成单独的清单,“mt.exe-tlb:Client.tlb-dll:Client.dll-out:Client.manifest” 然后

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

我使用MMM(生成清单)工具扫描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中的错误”


我是否正确地完成了上述工作,是否有人有过类似的经验,是否有人愿意帮助我。

以下是一个简短的说明:

  • 首先,对于.Net dll,它使用以下命令生成临时文件的清单

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

    mt.exe -nologo -manifest "{dotnet_dll}.manifest" -outputresource:"{dotnet_dll}";2
    
  • 最后,通过从.Net dll清单中提取
    assemblyIdentity
    标记并将其添加到
    dependency\dependentAssembly
    标记中,从VB6可执行文件中引用.Net dll,如下所示

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

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

    A[ComVisible]。Net程序集需要清单中的
    元素。VB6工具不知道如何做到这一点。合并清单的最佳方法是使用文本编辑器。写一个:嗨,wqw,现在program.exe清单似乎拾取了Client.dll嵌入清单。但现在我在一个消息框中看到一个错误,上面写着:运行时错误'-2146234341'(801310B)自动化错误。因此,我认为这可能是与client.dll代码相关的问题,但当我使用client.dll执行regasm时,program.exe可以工作。com Client.dll使用并引用了另外两个.net dll、.A.dll和一个B.dll,这两个dll也与program.exe位于同一目录中。有什么想法吗?你有没有把Client.dll所依赖的网络dll和VB6可执行文件放在同一个文件夹中?几乎可以肯定,您的错误是一个简单的路径查找错误。使用fuslogvw.exe(来自windows7.1 SDK)和sxstrace.exe对此进行故障排除。