我有一個.NET應用程序調用COM組件(C++),該組件調用另一個COM對象。淨。.net調用COM,然後調用其他.net COM對象在使用SxS和清單文件時工作
此應用程序正在使用Windows SxS功能,並未註冊任何COM組件。不是用C++編寫的,也不是用.net編寫的。
對C++ COM組件的第一次調用工作正常。但是,當C++ COM組件調用.net的時候,它會因類未註冊而失敗。
我已經嘗試創建一個小的C++應用程序與清單文件,它調用.net組件,它的工作原理。 似乎當流量是.net - > COM NATIVE - > .NET COM。然後SxS中斷並且不起作用。
查看Fusion日誌(程序集加載日誌)時,我發現沒有人甚至試圖解析.NET COM程序集。
這是SxS方案甚至應該工作(我認爲它應該工作)?如果是的話,那麼我該做什麼錯了?
這些是我使用的清單文件。
應用清單中的.NET應用程序(如內嵌資源):
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<file name="DotNetComConsumer.dll" hashalg="SHA1">
<comClass clsid="{44E69FC9-5EAF-4D57-8C09-430F703AD82F}" tlbid="{4F81C9C3-FDDF-48F6-BC25-6F8CD458EBE6}"/>
<typelib tlbid="{4F81C9C3-FDDF-48F6-BC25-6F8CD458EBE6}" resourceid="1" version="2.0" helpdir="" flags="HASDISKIMAGE"/>
</file>
<comInterfaceExternalProxyStub name="_Class1" iid="{5D41351A-440B-4175-9296-72D5EED83AA7}" tlbid="{4F81C9C3-FDDF-48F6-BC25-6F8CD458EBE6}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="application.sxs" version="1.0.0.0" />
</dependentAssembly>
</dependency>
</asmv1:assembly>
application.sxs.manifest(常規文件):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="application.sxs" version="1.0.0.0"/>
<dependency>
<dependentAssembly>
<assemblyIdentity name="PerformanceMonitor" version="10.0.0.9999" publicKeyToken="792843134cf0407a" processorArchitecture="msil"/>
</dependentAssembly>
</dependency>
</assembly>
PerformanceMonitor清單(內嵌在PerformanceMonitor資源.dll解決.net COM在XP中的bug):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="PerformanceMonitor" version="10.0.0.9999" publicKeyToken="792843134cf0407a" processorArchitecture="msil"></assemblyIdentity>
<clrClass clsid="{AA614438-BC7D-400c-8837-525BFBB7253A}" progid="PerformanceMonitorFactory" threadingModel="Both" name="PerformanceMonitorFactory" runtimeVersion="v2.0.50727"></clrClass>
<file name="PerformanceMonitor.dll" hashalg="SHA1"/>
</assembly>