сбой создания экземпляра COM-объекта Невозможно преобразовать объект

У меня есть COM-объект, созданный с помощью С# .net framework 2.0, COM-клиент - Windows-приложение net framework 4.6.1. COM-клиенту не удается создать экземпляр COM-объекта, исключение: невозможно преобразовать объект. Установив для useLegacyV2RuntimeActivationPolicy в файле app.config клиента COM значение false, можно успешно создать экземпляр COM-объекта.

Не могли бы вы объяснить это? есть ли способ создать экземпляр COM-объекта с параметром useLegacyV2RuntimeActivationPolicy, установленным в true?

Код для COM-объекта, который мы взяли из: https://www.codeproject.com/Articles/35532/C-COM-Object-for-Use-In-JavaScript-HTML-Including

Мы заменяем клиент приложением Windows.

неудачный кастинг

объект com реестра


person Tomer Trojman    schedule 13.12.2017    source источник
comment
Это очень зависит от специфики вашего проекта. Трудно сказать без дополнительной информации/воспроизведения кода и т. д. Обратите внимание, что значение по умолчанию useLegacyV2RuntimeActivationPolicy на самом деле ложно. Итак, ИМХО, вам следует вместо этого работать над сохранением значения false для useLegacyV2RuntimeActivationPolicy вместо того, чтобы менять все, чтобы иметь возможность установить для него значение true. Разве вы не можете просто перекомпилировать компонент framework 2 и двигаться вперед с расчетом на будущее?   -  person Simon Mourier    schedule 13.12.2017
comment
Я перекомпилировал объект com на 4.6.1, когда клиент установил useLegacyV2RuntimeActivationPolicy=true, происходит то же самое приведение ошибок   -  person Tomer Trojman    schedule 13.12.2017
comment
Если все скомпилировано с 4.6.1, то useLegacyV2RuntimeActivationPolicy вообще не нужен.   -  person Simon Mourier    schedule 13.12.2017
comment
Хм, в этих вещах нет никакого смысла. Просто перестаньте использовать COM, в этом сценарии он совершенно бесполезен. Не добавляйте ссылку на библиотеку типов, вместо этого добавьте ссылку на сборку. И используйте ключевое слово new для создания экземпляра, как вы всегда делаете с классом .NET. Неважно, была ли библиотека классов скомпилирована для версии 2.0 или 4.6.1.   -  person Hans Passant    schedule 13.12.2017
comment
Это POC для устранения проблемы, которая есть у нас в нашем продукте. Наш продукт потребляет объект com от третьей стороны, в настоящее время мы обнаружили, что если мы скомпилировали или продукт на 32-разрядной версии, мы не теряем приведения, где наш продукт является WPF приложение с конфигурацией useLegacyV2RuntimeActivationPolicy, установленной в true   -  person Tomer Trojman    schedule 13.12.2017


Ответы (1)


Вы можете прочитать о настройке политики активации V2 во время выполнения здесь: http://reedcopsey.com/2011/09/15/setting-uselegacyv2runtimeactivationpolicy-at-runtime/

person SoronelHaetir    schedule 13.12.2017