Отладка пользовательских действий WIX не работает
Я попытался отладить мое пользовательское действие.
Я поместил Debugger.Break() в пользовательские действия cs.
Когда я создаю настраиваемое действие, он создает эти файлы:
myCustomAction.dll
myCustomAction.CA.dll
myCustomAction.pdb
В проекте wix я ссылаюсь на myCustomAction.CA.dll внутри двоичных тегов (а не myCustomAction.dll).
Поскольку myCustomAction.CA.pdb не существует, это причина, по которой отладка не работает?
Я также попробовал с сообщением и приложил к процессу, когда отображается окно сообщения.
Но я получаю следующее сообщение: Не удается найти или открыть файл PDB.
Что я делаю неправильно? У меня версия wix 3.5 и visual studio 2010.
Ответы
Ответ 1
Вот статья, которая мне помогла.
Просто добавьте следующий код в первую строку своего пользовательского действия:
System.Diagnostics.Debugger.Launch();
Затем просто запустите установщик. Когда он начнет выполнение вашего действия, появится всплывающее окно с предложением запустить визуальную студию для отладки.
Ваша справочная библиотека верна, она должна быть *.CA.dll. Также будет работать подход с MessageBox, но вам нужно будет подключиться к процессу rundll32.
Ответ 2
С пользовательскими действиями DTF эти два метода:
1) Поместите MessageBox в свое настраиваемое действие, а затем присоедините Visual Studio к этому процессу. При подключении найдите процесс rundll32 с загруженными native и CLR.
2) Установите переменную среды MsiBreak в имя вашей точки входа и перезагрузите компьютер. DTF будет вызывать отладчик при вызове этого пользовательского действия.
В противном случае мое общее предположение заключается в том, чтобы ваша точка входа была очень тонким шпоном, который соединяет многоразовый класс с MSI. Обычно я создаю отдельный класс, который я могу подавать и тестировать все в консольном приложении, а затем подключать этот класс до DTF. Мне почти никогда не нужно отлаживать настраиваемое действие установщика.
В противном случае я знаю, что это вообще работает.
Ответ 3
Не уверен, в чем проблема с вашей стороны, но вот статья с примером пользовательского действия и метод ее отладки. Он должен работать, как описано в следующей статье: http://www.advancedinstaller.com/user-guide/qa-c-sharp-ca.html
Ответ 4
Это в дополнение к использованию
System.Diagnostics.Debugger.Launch();
В целях улучшения отладки в удаленной системе, например, VM.
Я сделал некоторые изменения в файле целей wix, используемом для упаковки .CA.dll, и у меня есть хороший результат.
В состоянии первого Create Item я добавил чек для
% (ReferenceCopyLocalPaths.extension) '=='.pdb '
таким образом, большинство моих зависимостей .pdb теперь включены в my.CA.dll и позволяют легче работать с отладочными средствами на удаленной системе.
C:\Program Files (x86)\MSBuild\Microsoft\WiX\v3.x\wix.ca.targets
<Target Name="PackCustomAction"
Inputs="@(IntermediateAssembly);@(Content);$(CustomActionContents)"
Outputs="$(IntermediateOutputPath)$(TargetCAFileName)">
<!-- Find all referenced items marked CopyLocal, but exclude non-binary files. -->
<CreateItem
Include="@(ReferenceCopyLocalPaths)"
Condition=" '%(ReferenceCopyLocalPaths.extension)' == '.pdb' or '%(ReferenceCopyLocalPaths.extension)' == '.dll' or '%(ReferenceCopyLocalPaths.extension)' == '.exe'">
<Output TaskParameter="Include" ItemName="CustomActionReferenceContents"/>
</CreateItem>