#c# #com #vb6 #com-interop #.net-framework-version
#c# #com #vb6 #com-взаимодействие #.net-framework-version
Вопрос:
У меня есть приложение VB6, которое использует C # COM DLL, скомпилированную с .Net Framework 3.5. Однако на сервере 2016 .Net 3.5 не установлен. Однако 4.6.7 есть и будет запускать код DLL.
Однако при вызове vb6 CreateObject
происходит сбой. (хотя COM-объект зарегистрирован правильно.)
Установщик приложения вызывает утилиту RegASM в правильном.Папка Net framework для регистрации библиотеки типов для DLL. Я могу убедиться, что сделаны все правильные записи в реестре.
Приложение VB6 завершается с ошибкой 429: не удается создать объект. Если я ничего не делаю, кроме установки .Net 3.5, это работает. Итак, я уверен, что регистрация прошла нормально. Я просто не знаю, как заставить DLL использовать фреймворк 4.x.x.
Я попытался создать VB6App.exe.config
и поместить в него supportedRuntime
теги. Не повезло — предположим, это работает только для .Net exes.
.Net COM DLL предназначена как для новой, так и для старой ОС.
Я бы предпочел не устанавливать.Net 3.5, если мне не нужно. Есть ли способ заставить это работать?
<configuration>
<startup>
<!--Will run on .Net 2.0,3.5-->
<supportedRuntime version="v2.0.50727"/>
<!--Will run on .Net 4.0 and later-->
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Комментарии:
1. Хм, также вы упомянули, что «4.6.7 запустит код DLL» — как вы это подтвердили? У вас есть отдельный . Приложение только для СЕТИ, которое использует ту же сборку, например?
2. Может ли это быть проблемой x86 против x64? VB6 — это x86, вы уверены, что зарегистрировали свой COM-объект в реестре x86? В противном случае вы можете использовать инструмент Process Monitor из sysinternals и посмотреть на вызовы реестра / файлов.
3. Нет, это не проблема x86 или x64. Это давно установленное приложение и набор DLL. Приложение Vb6 и DLL развернуты на 100 системах x86 и x64. Новый. Фактором здесь является последняя версия WIn 10 и server 2016, где по умолчанию не установлен 3.5. Вопрос действительно в следующем: работает ли файл app.exe.config с неуправляемым exe при загрузке управляемых DLL? Или есть другое решение?
4. Нашел этот старый ответ: social.msdn.microsoft.com/Forums/vstudio/en-US /… . Это отвечает на важный вопрос: можно ли использовать файлы app.confg на неуправляемых exes. Все еще пытаюсь разобраться в этом.
5. атрибут useLegacyV2RuntimeActivationPolicy=»true» решил проблему
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <!--Will run on .Net 2.0,3.5--> <supportedRuntime version="v2.0.50727"/> <!--Will run on .Net 4.0 and later--> <supportedRuntime version="v4.0"/> </startup> </configuration>