У меня есть код .NET, который я использую из кода VB6. Я всегда разрабатывал это на машине XP, создав файл VB6.exe.manifest, в котором перечислены зависимые сборки .NET.
Например, скажем, что мои 2 сборки .NET - это Some.Assembly.A.ll и Some.Assembly.B.dll, вот что выглядит VB6.EXE.manifest(я использую версию = 1.1.0.0 ниже, потому что это это версия, установленная в .NET AssemblyVersion в AssemblyInfo.cs):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type = "win32"
name = "client"
version = "1.1.0.0" />
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Some.Assembly.A"
version="1.1.0.0" />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Some.Assembly.B"
version="1.1.0.0" />
</dependentAssembly>
</dependency>
</assembly>
Затем вместе с DLL в том же каталоге у меня есть сборки и их собственные файлы манифеста. Вот пример "Some.Assembly.A.dll.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="Some.Assembly.A"
version="1.1.0.0" />
<clrClass
clsid="{F1234567-1234-1234-1234-123456789012}"
progid="Some.Assembly.A.Class1"
threadingModel="Both"
name="Some.Assembly.A.Class1" >
</clrClass>
<file name = "Some.Assembly.A.dll" />
</assembly>
Я также запускаю tlbexp
в связанных DLL файлах для создания файлов TLB, и это то, что я упоминаю в файле проекта VB6.
Я хочу перейти на машину Windows 7 64 BIT. Используя те же методы, когда я ударил код VB6, который создает экземпляр объекта .NET на машине WIN7, я получаю
"Компонент ActiveX не может создать Объект".
В XP это удается. Если я намеренно ошибочно назову сборку Dependent в VB6.EXE.manifest - на XP я получаю
"Это приложение не удалось запустить потому что конфигурация приложения это неверно. Переустановка приложение может решить эту проблему."
В WIN7, VB6 просто загружается. Он как будто игнорирует манифест на WIN7, поэтому я не могу загрузить свой .NET-объект, используя REG FREE-методы на WIN7. Если я regasm
DLL, все работает.
Любые идеи о том, как заставить VB6 работать с reg free com на WIN7 (64 BIT)?