vsdraCOM заставляет путь кодовой базы указывать на путь сборки

У нас есть несколько dll, которые мы хотели бы установить с помощью msi.

В нашей тестовой среде мы используем regasm -codebase для регистрации dll.

Насколько я понял из гугления, это достигается в проекте msi установкой свойства register в vsdraCOM.

Проблема в том, что когда мы запускаем установщик и проверяем реестр, путь к кодовой базе устанавливается на путь, по которому файл находился при сборке msi.


person Mikael Holmgren    schedule 12.11.2014    source источник
comment
blogs.msdn.com/b/msiclickonce/archive/2010/08/03/   -  person Hans Passant    schedule 12.11.2014
comment
Это не выглядело так прямолинейно. Я видел, что это рекомендовали на других сайтах. Возможно, это лучшее решение для GAC? Но как тогда мне получить регистрацию COM через msi. Опять .reg-файл? Кажется, недостаточно просто поместить его в GAC. Рег файл никак не обойти?   -  person Mikael Holmgren    schedule 13.11.2014
comment
Ну, в общем, люди, которые зарабатывают на жизнь написанием установщиков, сильно не доверяют компонентам, чтобы они позаботились об этом. Ключи реестра они пишут сами. И да, использование GAC для компонентов [ComVisible] — очень хорошая идея, у COM есть очень неприятные проблемы с DLL Hell. Например, хорошо видно из Regasm.exe, он громко жалуется, когда вы используете /codebase.   -  person Hans Passant    schedule 13.11.2014


Ответы (2)


Я собираюсь расширить ответ Ганса и информацию об этой ссылке, и это может быть больше, чем может содержать комментарий.

Этот reg-файл будет содержать путь к файлу, и в статье со ссылками рекомендуется использовать [TARGETDIR], что в принципе неверно, если файл не устанавливается в папку приложения. Путь к вашему файлу должен быть записан как [#file-key] в reg-файле, который вы импортируете. В проекте установки VS файл-ключ будет (просто пример) чем-то вроде _B049230C37DE4B6787C578DCEE30252A. Откройте файл MSI с помощью Orca, перейдите в таблицу файлов и используйте ключ файла в столбце «Файл», который соответствует имени вашего файла.

Вот отсюда:

http://msdn.microsoft.com/en-us/library/aa368609%28v=vs.85%29.aspx

7-й пункт списка. Он разрешается в путь к файлу, где бы он ни был установлен.

Другая вещь, которую можно сделать, это позволить Visual Studio сделать свою неправильную работу, затем перейти к таблице реестра с помощью Orca, найти путь и поместить в него этот [ключ #file], например [#_B049230C37DE4B6787C578DCEE30252A], и люди иногда делают это виды обновлений со сценарием после сборки для обновления MSI.

Ни один из них не является хорошим, но они должны работать и избавить вас от использования GAC. Проекты установки VS действительно должны использовать этот синтаксис [#file key], и я полагаю, что это просто глупая ошибка.

person PhilDW    schedule 13.11.2014

Говоря как человек, который в течение 18 лет полностью посвятил себя написанию инсталляций, мое первое предложение — перейти на XML установщика Windows. Если вы настаиваете на использовании .VDPROJ, я бы посоветовал прочитать: Возврат проектов развертывания Visual Studio.

Идея заключается в том, что вы используете XML установщика Windows для создания модуля слияния, а затем используете этот модуль слияния с .VDPROJ. В Wix вы используете Heat для сбора DLL. Он извлечет метаданные COM/Regasm и создаст их как записи таблицы реестра. Это обеспечивает хорошую чистую инкапсуляцию с использованием передовых методов разработки и позволяет избежать необходимости выполнять какие-либо действия по взлому построенной базы данных MSI после сборки.

person Christopher Painter    schedule 17.11.2014