Я использую Wix 3.5 Votive (интеграция с Visual Studio) для создания установщика для некоторых COM-объектов.
В Votive установка ссылки на проект извлекает двоичные файлы из этого проекта и автоматически генерирует Wixисточник во время компиляции.Это абсолютно здорово, это СУХОЙ и означает, что мне не нужно постоянно обновлять Wix XML.Фрагмент, который генерирует Votive, выглядит следующим образом:
<Fragment>
<DirectoryRef Id="INSTALLLOCATION">
<Component Id="cmpBCE83EAB1AAF2230E306A7325EE7EA11" Guid="*">
<File Id="fil61D40E7D1A1D0A60C27CE6960FED2B0B" Source="$(var.My.Assembly.TargetDir)\My.Assembly.dll" />
</Component>
</DirectoryRef>
</Fragment>
Он делает то же самое для исходных файлов, документов и спутников, ни один из которых я не использую.Тем не менее, он не генерирует записи в реестре для регистрации COM (сборка помечена как «Видимая COM» и «Регистрация для взаимодействия COM», но Votive, похоже, не имеет механизма для решения этой проблемы.
За кулисами Votive вызывает Heat.exe, чтобы собрать все эти вещи, и, вызывая Heat на сборке, выплевывает файл с кучей записей <Class .../>
и <RegistryValue .../>
, что именно то, что нужно сделатьрегистрация COM. Так что, конечно, Heat может сгенерировать этот материал, и было бы просто сделать это один раз и отредактировать вывод в проекте Wix. Но это нарушает принцип DRY и требует поддержания проекта Wix в ногу с исходным кодом.вручную. По некоторым причинам, я бы предпочел, чтобы Votive / MSBuild делала это автоматически, каждый раз, когда создается решение.
Я ни в коем случае не эксперт MSBuild, и яогромная кривая обучения с Wix, Votive и MSBuild. Мне потребовалось несколько дней, чтобы продвинуться так.Суть в следующем: есть ли простой способ, чтобы Votive / MSBuild генерировал этот материал для регистрации COM каждый раз, когда строится решение?Я ожидаю, что для каждого ссылочного проекта, если установлен параметр «Регистрация для взаимодействия COM», то Votive / MSBuild сгенерирует регистрацию COM для выходной сборки этого проекта.Кто-нибудь достиг этого, и, если да, не могли бы вы помочь мне, пожалуйста, пока мой мозг не превратился в желе!