Я использую Visual Studio 2010 в Windows 7 64-разрядный Профессионал. Я испытываю затруднения при отладке пользовательского PowerShell cmdlet.
C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
-noexit -command Add-PSSnapIn MyCustomSnapIn
Проблема 1: Отказ присоединить, когда я нажимаю F5 (Debug → Начинают Отлаживать),
Проблема 2: Неожиданно запуски как 32-разрядный процесс, когда я нажимаю Ctrl+F5 (Debug → Запускаются Без Отладки),
Раздражающий способ отладить прямо сейчас: единственным путем я нашел для отладки моего cmdlet, должен нажать F5, затем выбрать Debug→Detach Все, затем выбрать Debug→Attach, Чтобы Обработать и повторно прикрепить Visual Studio.
Проблема 1: powershell.exe на самом деле не является управляемым исполняемым файлом. Он содержит сам CLR, поэтому для его работы необходимо включить отладку родного кода наряду с управляемым.
Что касается проблемы 2, я не уверен в этом. Очевидно, что VS сама по себе является 32-разрядным процессом, поэтому, возможно, она вмешивается.
По проблеме #2, поскольку Visual Studio является 32-битным процессом, запущенным на WOW64, путь C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
перенаправляется на C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
. Именно там находится 32-битная версия PowerShell.
Мне удалось решить проблему №2, создав папку C: \ dev \ PowerShell \ x64
и скопировав все из C: \ Windows \ System32 \ WindowsPowerShell \ v1.0
в него. Я создал аналогичную папку C: \ dev \ PowerShell \ x86
. Предполагаемая версия PowerShell всегда запускается, когда я указываю эти пути, поэтому самый короткий способ начать отладку - это теперь «Начать без отладки» с последующим присоединением к процессу.
Проблема 1:
Мне кажется, что это ошибка в VS2010, о которой сообщалось здесь: https://connect.microsoft.com/VisualStudio/feedback/details/539389/debugging-powershell-cmdlet-from-vs-2010-does-not-stop-at-breakpoints?wa=wsignin1.0
Использование VS2008 должно помочь.
Обновление: Я нашел более удобный способ отладки команд powershell. В проводнике решений щелкните правой кнопкой мыши на узле решения -> Добавить -> Новый проект -> Выберите файл powershell.exe (C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe). Установите только что добавленный проект в качестве стартового (щелкните правой кнопкой мыши и выберите "Set As Startup Project"). Затем перейдите к свойствам проекта (щелкните правой кнопкой мыши на узле проекта и выберите "Properties") и установите свойство "Debugger Type" на "Managed (v2.0, v1.1, v1.0)". Не забудьте зарегистрировать Provider или CmdLet (путем запуска событий после сборки, см. http://msdn.microsoft.com/en-us/library/ms714644%28v=vs.85%29.aspx). Теперь программа должна остановиться на точке останова.
Вы не упоминаете, как вы устанавливаете плагин, перед вызовом Add-PSSnapin, чтобы его можно было использовать в сеансе отладки.
Убедитесь, что вы устанавливаете плагин, используя C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ InstallUtil.exe
, а не тот, который находится в ... \ Framework ... - это поставило меня в тупик на пару дней.