Настраиваемое действие WiX Toolset - Невозможно найти dll и ссылку через WiX Project

Я пытаюсь внедрить сценарии SQL с помощью Custom Action набора инструментов WiX, когда мой установщик подходит к концу.

Product.wxs,

<CustomAction Id="SetMyActionValues" Return="check" Property="MyAction" Value="dbServer= 
[DATABASE_SERVER];dbName=[DATABASE_NAME];dbUser=[DATABASE_USERNAME];dbPass= 
[DATABASE_PASSWORD];folderPath=[CREATESCRIPTS]"/>

<Binary Id="MyScripts" SourceFile="C:\Users\User\source\repos\Scripts\Scripts\bin\Scripts.CA.dll" />

<CustomAction Id="MyAction" Return="check" Execute="deferred" BinaryKey="MyScripts" DllEntry="CustomAction1"/>

Когда я установил FileSource двоичной записи на абсолютный путь (C: \ Users \ User \ source \ repos \ Scripts \ Scripts \ bin \ Scripts.CA.dll), он скомпилировался успешно, но выдал ошибку, говорящую, что dll не может быть найдена когда установка была близка к завершению.

Не могу найти dll

Затем я попытался связать Scripts.CA.dll с моим проектом WiX и изменить FileSource на Scripts.CA.dll. На этот раз мне не удалось скомпилировать проект, и Visual Studio сообщает мне, что в Scripts.CA.dll отсутствует манифест сборки.

Манифест сборки отсутствует

Я использую последнюю версию набора инструментов WiX, может ли кто-нибудь указать мне, какая часть пошла не так?

Большое спасибо.


person sfDev    schedule 06.10.2019    source источник
comment
Пожалуйста, поделитесь журналом установщика и тем, как это настраиваемое действие написано в проекте настраиваемого действия wix.   -  person Ashish Kamat    schedule 07.10.2019


Ответы (2)


Предполагая, что вы используете настраиваемое действие c # wix. Эта проблема «dll не найдена» обычно возникает из-за упущения следующих пунктов:

  1. Возможно, ваш двоичный файл не требует дополнительных действий. Случай неправильного двоичного файла, использованного в настраиваемом действии.

  2. Имя вашего настраиваемого действия может не совпадать с тем, что написано в проекте настраиваемого действия. Это имя чувствительно к регистру.

Попробуйте выполнить команду ниже, чтобы определить, присутствует ли метод настраиваемого действия в ca.dll.

Dumpbin.exe поставляется с пакетами разработки Visual Studio C ++. В нем будут перечислены все общедоступные методы настраиваемых действий. Запустите в командной строке разработки Visual Studio.

Dumpbin.exe /exports Sample.ca.dll
  1. Атрибут метода не предоставлен для настраиваемого действия. Если вы не укажете CustomAction в качестве атрибута метода, он никогда не будет доступен через ca.dll.
[CustomAction]
public static ActionResult customActionName(Session session)
{
     //Do Action
     return ActionResult.Success;
}

Изменить 2:

Обычно мы не указываем абсолютный путь к какому-либо файлу, вы можете использовать ссылку на проект CA для получения пути к ca.dll. Например. "$ (var.CustomActionProjectName.TargetDir) \ Scripts.CA.dll". Здесь CustomActionProjectName - это проект, на который имеется ссылка в установщике для настраиваемого действия. Этот путь может быть определен в файле wxi для лучшей структуризации.

Файл Installer.wxi

<?define customActionDllPath="$(var.CustomActionProjectName.TargetDir)\Scripts.CA.dl" ?>

CustomAction.wxs

<?include "Installer.wxi"?>
<Binary Id="MyScripts" SourceFile="$(var.customActionDllPath)\Scripts.CA.dll" />
person Ashish Kamat    schedule 07.10.2019
comment
Я использую WiX Toolset 3.11 и VB Custom Action. Я проверил 1 и 2, у двоичного файла действительно есть мое настраиваемое действие и атрибут ‹CustomAction ()›. Я удалил Scripts.CA.dll и переключил его обратно на абсолютный путь, но я не уверен, следует ли использовать отложенный, поскольку мне нужно дождаться, пока установщик завершит создание базы данных, только затем запустите настраиваемое действие, чтобы вводить скрипты sql. Я проверил InstallSequence, ближайшим будет Before = InstallFinalize. Любые идеи? - person sfDev; 08.10.2019
comment
Планирование не имеет ничего общего с ошибкой «dll not found». - person Ashish Kamat; 09.10.2019
comment
Пожалуйста, поделитесь журналами установщика с точной проблемой и добавьте настраиваемое действие VB, которое вы использовали для customaction1. - person Ashish Kamat; 09.10.2019

Я использовал ваш ответ «Редактировать 2» и успешно скомпилировал. Шаги, которые я сделал:

  1. Добавить ссылку на проект в мой проект настраиваемого действия.
  2. Следуйте инструкциям Edit 2
  3. Скомпилировать успешно

Думаю, мы просто не могли напрямую добавить ссылку на Scripts.CA.dll. Спасибо, Ашиш!

person sfDev    schedule 13.10.2019