Сборке не удается загрузить через COM-взаимодействие, если не присутствует framework 3.5?

#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>