У меня есть код .NET, который я использую из кода VB6. Я всегда разрабатывал это на машине XP, создавая файл VB6.exe.manifest, в котором перечислены зависимые сборки .NET.
Например, у меня две сборки .NET: Some.Assembly.A.dll и 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, я получаю
" Object. "
В XP это успешно. Если я намеренно неправильно написала зависимую сборку в VB6.EXE.manifest - в XP я получаю
" Это приложение не запустилось потому что конфигурация приложения это неверно. Переустановка приложение может решить эту проблему. "
В WIN7 VB6 просто загружается. Это похоже на то, что он игнорирует манифест в WIN7, поэтому я не могу загрузить свой .NET-объект с помощью методов REG FREE в WIN7. Если я regasm
DLL, все работает.
Есть идеи, как заставить VB6 работать с reg free com на WIN7 (64 бит)?