Пользовательская операция отладки WIxsharp в консоли

У меня есть проект с настраиваемым действием, который компилируется в.dll, я хочу иметь возможность пошагово выполнять свои пользовательские действия, я знаю, что пакет можно изменить на wixsharp.bin, но это не очень практично. Несмотря на это, я все еще пробовал этот метод, но он не достиг моих контрольных точек.

Wix использует: System.Diagnostics.Debugger.Launch(); который запускает действие в отладке, похоже, это не работает для wixsharp, но это ожидаемый результат - это то, чего я пытаюсь достичь.

Я видел, что debug.assert можно использовать для отладки, и я также видел ссылки на #if DEBUG #endif Как правильно отладить?

    [CustomAction]
    public static ActionResult CustomAction(Session session)
    {
        Debug.Assert();
        MessageBox.Show("Hello World!" + session[IISSessions.AppPoolName], "External Managed CA");

        return ActionResult.Success;
    }

2 ответа

Решение

Не совсем уверенный, что вызвало проблему, я удалил папку bin, а затем запустил сборку, и теперь она, кажется, работает. System.Diagnostics.Debugger.Launch() работает правильно, он должен содержаться в #if DEBUG как сказал @Stein Åsmul. После того, как в DEBUG будет встроен запускаемый MSI-файл, вам будет предложено открыть экземпляр Visual Studio, когда вы нажмете свое пользовательское действие во время установки.

   [CustomAction]
    public static ActionResult CustomAction(Session session)
    {

    #if DEBUG
            System.Diagnostics.Debugger.Launch();
    #endif
            MessageBox.Show("Hello World!" + session[IISSessions.AppPoolName], "External Managed CA");

            return ActionResult.Success;
     }

NB! Я не использую WixSharp, но ниже должно быть универсальным. По крайней мере, некоторые из них.

Отладка пользовательских действий: я просто следую этой процедуре (поскольку я обычно использую нативный код):

  1. Скомпилируйте отладочные файлы и включите их в пакет.
  2. Показать окно сообщения из настраиваемого действия.
  3. Используйте Visual Studio, чтобы присоединиться к процессу, отображающему диалоговое окно.
    • Вы прикрепляете к msiexec.exe для собственного неуправляемого кода и rundll32.exe для управляемого кода. Системный контекст или пользовательский контекстный процесс в зависимости от того, как выполняется настраиваемое действие.
    • Установите точку останова в коде сразу после диалога и позвольте ему ударить.
    • Это должно работать при условии, что ваш исходный код совпадает с тем, что находится в ваших двоичных файлах отладки в пакете (символы отладки).

Видео с практическими рекомендациями: есть видео от http://www.advancedinstaller.com/, показывающее большую часть процесса: Отладка C# Custom Actions. Это довольно хорошо.


Эта проблема возникла в последнее время много, в последнее время в этом вопросе / ответе, раздел 4.

Вот несколько устаревших, но хороших материалов по этой теме с сайта http://www.installsite.org/: Отладка пользовательских действий.


Я выполнил тест по вашему собственному предложению, чтобы убедиться, что он работает и для обычной настройки WiX (#if DEBUG делает код применимым только к отладочным сборкам):

#if DEBUG
   System.Diagnostics.Debugger.Launch();
#endif

Другая команда, которую вы упомянули, работает и для меня:

Debug.Assert(false);

Основная задача состоит в том, чтобы убедиться, что верная версия DLL входит в MSI. Если вы не видите ожидаемого поведения, попробуйте вручную вставить версию dll (отладка или выпуск), с которой вы собираетесь работать, в MSI, используя Orca или другой инструмент редактора MSI - просто чтобы убедиться, что там есть нужный двоичный файл. Я не знаю, как это настроено в WixSharp.


Для справки: отладка пользовательских действий

C++ debugging:

Managed Code (в дополнение к выше):

Другие вопросы по тегам