Пользовательская операция отладки 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, но ниже должно быть универсальным. По крайней мере, некоторые из них.
Отладка пользовательских действий: я просто следую этой процедуре (поскольку я обычно использую нативный код):
- Скомпилируйте отладочные файлы и включите их в пакет.
- Показать окно сообщения из настраиваемого действия.
- Используйте 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
:
- Переменная среды MsiBreak
- AssertSz(FALSE, "отладка CustomActionName здесь.")
- __asm {int 3};
- DebugBreak и __debugbreak
Managed Code
(в дополнение к выше):