Настраиваемое действие WiX Toolset - невозможно найти dll и ссылку через WiX Project - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь внедрить сценарии SQL, используя настраиваемое действие набора инструментов 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 отсутствует манифест сборки.

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

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

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

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

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

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

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

0 голосов
/ 07 октября 2019

Если вы используете пользовательское действие c # wix. Эта проблема 'dll not found' обычно возникает из-за пропуска следующих пунктов:

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

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

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

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

Dumpbin.exe /exports Sample.ca.dll
Атрибут метода не предусмотрен для настраиваемого действия. Если вы не предоставите 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" />
...