Фон. У меня есть блок Обертки COM под названием ComWrapper.dll, записанный в C# и приложении Visual Basic 6 под названием Project1.exe. Я добавил файл Project1.exe.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="Project1.exe"
version="1.0.0.0"
processorArchitecture="x86" />
<dependency>
<dependentAssembly>
<assemblyIdentity name="ComWrapper" version="1.0.0.0" processorArchitecture="msil"></assemblyIdentity>
<clrClass clsid="{3ac3d04e-1f83-4a27-b516-95e38126685d}" progid="MyComObjectNamespace.myclass" threadingModel="Both" name="MyComObjectNamespace.myclass" runtimeVersion=""></clrClass>
<file name="ComWrapper.dll" hashalg="SHA1"></file>
<dependency>
<dependentAssembly>
<assemblyIdentity name="mscorlib" version="2.0.0.0" publicKeyToken="b77a5c561934e089"></assemblyIdentity>
</dependentAssembly>
</dependency>
</dependentAssembly>
</dependency>
</assembly>
Любая справка очень ценилась бы.
Вам нужно использовать sxstrace.exe, чтобы определить фактическую причину ошибки, как говорит вам (полный) текст сообщения об ошибке. Вот что не так:
INFO: Parsing Manifest File
C:\Temp\sxs\Project1.exe.Manifest.
INFO: Manifest Definition Identity is Project1.exe,processorArchitecture="x86",type="win32",version="1.0.0.0".
INFO: Ссылка: ComWrapper,processorArchitecture="msil",version="1.0.0.0"
ERROR: Строка 9: Элемент clrClass появляется как дочерний элемент элемента urn:schemas-microsoft-com:asm.v1^dependentAssembly, который не поддерживается данной версией Windows.
Проблема в том, что элемент dependentAssembly
не должен предоставлять полное описание сборки - он используется только для указания ссылки. Вы должны предоставить отдельный файл манифеста компонента для этой сборки, который затем описывает экспортируемые COM-классы через clrClass
. Более подробно это описано в этой статье MSDN.