尝试从本机应用程序并排访问.NET程序集时OLE错误80131522

时间:2010-11-03 15:21:05

标签: .net com manifest side-by-side

我有一个需要访问.NET程序集的应用程序(Delphi本机代码)(公开了一些COM类。我想使用并排的程序集和清单来完成这个。我用测试.NET程序集完成了这个。 ,但是我需要访问的程序集有问题。

注册程序集时,我可以实例化COM类。一旦我取消注册程序集,并尝试并排访问我得到上述错误。我的本机应用程序有一个应用程序清单,它对程序集具有简单的依赖性。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32"
                    name="TestApplication.exe"
                    version="1.0.0.0"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        name="TestAssembly"
        version="1.0.0.0"
        processorArchitecture="x86"
        publicKeyToken="xxxxxxxxxxxxxxxx"
        type="win32"/>
    </dependentAssembly>
  </dependency>
</assembly>

我的汇编清单,我作为资源嵌入到我的.net程序集中,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    name="TestAssembly"
    version="1.0.0.0"
    processorArchitecture="x86"
    publicKeyToken="xxxxxxxxxxxxxxxx"
    type="win32"/>
  <clrClass
    clsid="{F3F1623D-DB4A-4152-9A5D-5A465AD3A318}"
    progid="TestAssembly.MyObject"
    threadingModel="Both"    
    name="TestAssembly.MyObject"
    runtimeVersion="v2.0.50727">
  </clrClass>
  <file name="TestAssembly.dll">
  </file>
</assembly>     

清单似乎设置正确。如果我更改应用程序清单的依赖项名称,版本或公钥令牌(示例中的那个不是我的代码btw中的那个),我得到关于应用程序配置的错误的常见SxS错误。

我有这个工作在另一个(公认的更简单).NET程序集,但无法弄清楚出了什么问题。问题是我不确定错误的含义。

1 个答案:

答案 0 :(得分:3)

要生成.Net程序集清单,请使用mt.exe这样的

c:>mt.exe -nologo -managedassemblyname:"your_binary.dll" -nodependency -out:"temp_file.manifest"
c:>mt.exe -nologo -manifest "temp_file.manifest" -outputresource:"your_binary.dll";2

然后打开temp_file.manifest并在您的delphi可执行文件清单的assemblyIdentity标记下逐字复制dependency\dependentAssembly标记。

仅供参考:您必须将可执行文件和所有相关的.net dll保存在同一文件夹中。