Проблема:ClickOnce - Redemption.dll - Нет такой интерфейс поддерживается
Я изменяю приложение (Project A) было разработано, чтобы использовать метод развертывания ClickOnce. У меня есть проект VB DLL, который использует Redemption. Это работает на клиентском сайте в течение 3 лет. В настоящее время мы используем Install Shield в качестве установщика. Redemption отлично работает при установке с помощью этого метода. Мы используем VS2013, а приложение использует .NET 3.5.
После установки приложения из ClickOnce построить приложение запускается, но ошибки при попытке использовать Redemption:
Unable to cast COM object of type 'System.__ComObject' to interface type 'Redemption.IRDOItems'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{F8408EB8-6B65-4704-810C-29795E67C0DD}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
У меня есть другое приложение (Project B), который развертывается с помощью ClickOnce, которая также использует Redemption и его работает отлично. В этом проекте разница с Redemption заключается в том, что он ссылается и используется в основном проекте, а не в DLL-проекте в рамках решения. В этом проекте Redemption указан в разделе «Файлы приложений». Это приложение использует .NET 4.0.
Чтобы получить Проект А работать я скопировал настройки, используемой в проекте В.
В проекте B Выкуп был отмечен как:
- Isolated = True
- Вставить Interop Типы = True
В проекте A Погашение было отмечено как:
- Изолированный = True
- Copy Local = True
Код Interop типы не существует, потому что это .NET 3.5
Redemption.DLL не перечисленный в файлах приложений в проекте A , однако, если посмотреть на опубликованные файлы, они включены, а также развернуты на клиентской машине.
Нативный манифест для библиотеки VB DLL имеет все записи интерфейса, как и в манифесте Project B.
Я нашел несколько предложений после поиска bing/google, но я не смог найти кого-то, у кого была такая же проблема с COM-файлом. Это то, что я пробовал, но не с помощью:
Добавить файл Redemption в основной проект (без ссылки на него) и установить команду «Создать действие = Содержимое и копировать в выходной каталог = Копировать всегда».
- Это дало мне ошибку при публикации, о том, что манифест Redemption уже сделано (то есть нативный манифест для VB DLL).
- Изменение ссылки на выкуп в VB DLL, чтобы он не был изолирован позволил сборке работать, но все же получил исходную ошибку.
- Различные комбинации действия сборки и изоляции на Погашение в VB DLL дало те же результаты.
Добавить файл исправления в основной проект, но на этот раз ссылаясь на него. Установите изолированный = true в основном проекте и установите значение false в VB DLL. Также пробовали различные комбинации изолированного и скопированного локального в основном проекте и VB DLL.
Редактировать главный файл проекта и добавьте группу элементов для развертывания манифеста, как описано здесь:
Я изменил Project A использовать .NET 4.0, так что я мог бы точно такой же настройки по выкупу в соответствии с проектом B.
Все с таким же чистым результатом.
Резюме:
Redemption.DLL, кажется, развернут, но не регистрируются в пути для VB DLL, чтобы увидеть его. Любые предложения были бы очень желанными.