Проблемы, отлаживающие PowerShell cmdlet

Я использую Visual Studio 2010 в Windows 7 64-разрядный Профессионал. Я испытываю затруднения при отладке пользовательского PowerShell cmdlet.

Конфигурация

  • Язык: C#, предназначаясь для Платформы.NET 3,5 SP1.
  • Цель платформы: Любой ЦП
  • Запустите действие: C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
  • Параметры командной строки: -noexit -command Add-PSSnapIn MyCustomSnapIn

Проблема 1: Отказ присоединить, когда я нажимаю F5 (Debug → Начинают Отлаживать),

  • PowerShell открывается, и Диспетчер задач указывает, что powershell.exe работает как 64-разрядный процесс. Столбец Image Path Name показывает тот же исполняемый файл, указанный в Действии Запуска.
  • Если я выбираю Debug → Повреждение Все в Visual Studio, я получаю сообщение, "Не могущее повредить выполнение. Этот процесс в настоящее время не выполняет тип кода, который Вы выбрали для отладки".

Проблема 2: Неожиданно запуски как 32-разрядный процесс, когда я нажимаю Ctrl+F5 (Debug → Запускаются Без Отладки),

  • PowerShell открывается. Диспетчер задач указывает, что powershell.exe работает как 32-разрядный процесс - на этот раз, Имя Канала передачи изображения показывает перенаправление SysWOW64.

Раздражающий способ отладить прямо сейчас: единственным путем я нашел для отладки моего cmdlet, должен нажать F5, затем выбрать Debug→Detach Все, затем выбрать Debug→Attach, Чтобы Обработать и повторно прикрепить Visual Studio.

11
задан Sam Harwell 26 July 2010 в 13:21
поделиться

5 ответов

Проблема 1: powershell.exe на самом деле не является управляемым исполняемым файлом. Он содержит сам CLR, поэтому для его работы необходимо включить отладку родного кода наряду с управляемым.

Что касается проблемы 2, я не уверен в этом. Очевидно, что VS сама по себе является 32-разрядным процессом, поэтому, возможно, она вмешивается.

1
ответ дан 3 December 2019 в 09:40
поделиться

По проблеме #2, поскольку Visual Studio является 32-битным процессом, запущенным на WOW64, путь C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe перенаправляется на C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe. Именно там находится 32-битная версия PowerShell.

2
ответ дан 3 December 2019 в 09:40
поделиться

Мне удалось решить проблему №2, создав папку C: \ dev \ PowerShell \ x64 и скопировав все из C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 в него. Я создал аналогичную папку C: \ dev \ PowerShell \ x86 . Предполагаемая версия PowerShell всегда запускается, когда я указываю эти пути, поэтому самый короткий способ начать отладку - это теперь «Начать без отладки» с последующим присоединением к процессу.

0
ответ дан 3 December 2019 в 09:40
поделиться

Проблема 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). Теперь программа должна остановиться на точке останова.

6
ответ дан 3 December 2019 в 09:40
поделиться

Вы не упоминаете, как вы устанавливаете плагин, перед вызовом Add-PSSnapin, чтобы его можно было использовать в сеансе отладки.

Убедитесь, что вы устанавливаете плагин, используя C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ InstallUtil.exe , а не тот, который находится в ... \ Framework ... - это поставило меня в тупик на пару дней.

0
ответ дан 3 December 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: