Запуск и отладка модулей Powershell в Visual Studio 2017

Я разрабатываю модуль Powershell в C#, в Visual Studio 2017. Я немного удивлен тем, что опыт разработки настолько плох с точки зрения запуска и отладки, что я пытаюсь здесь испытать удачу.

У меня сейчас работает так:

  1. Реализовать модуль
  2. компилировать
  3. Начать новое окно Powershell
  4. Перейдите в папку bin/debug
  5. импортировать скомпилированную DLL (import-module)
  6. Запустите команды
  7. Закройте окно Powershell (иначе я не смогу пересобрать проект, так как файл DLL заблокирован)
  8. Исправьте ошибки и вернитесь к шагу № 2

В случае, если мне нужно отладить код, я использую присоединение VS2017 для обработки и отладки кода (после шага № 5).

Это не идеально с точки зрения DX, и я хотел бы иметь что-то лучшее, как можно ближе к этому:

  1. Реализовать модуль
  2. компилировать
  3. Нажмите F5 (start)
  4. Окно Powershell открывается с загруженным модулем
  5. Запустите команды
  6. Точки останова нажимают на паузу в программе, как мы привыкли

Как мне этого добиться?

1 ответ

Мне удалось получить эту работу с помощью вышеупомянутого комментария от @Glenn:

  • Начните отладку с помощью внешней программы

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    
  • и строка параметров

    -NoExit -command "Import-Module '<path to your module>'; " 
    

Теперь вы можете начать с F5 -> получить окно powershell с уже загруженным модулем, и отладчик подключен к этому процессу.

Но вы должны быть осторожны, если ваш двоичный модуль написан для целевой платформы.NET Standard. В этом случае кажется, что отладчик (VS2017 15.8.9) не может определить, какие модули времени выполнения загрузить. Таким образом, в этом сценарии нет никаких точек останова! Мой быстрый обходной путь - добавить другой проект с консольным приложением для.NET Framework 4.xy и использовать этот другой проект в качестве начального проекта с указанными выше настройками. Теперь мой рабочий процесс точно отражает вашу вторую последовательность (1-6). Выгрузка DLL не является проблемой, потому что остановка отладки завершает процесс.

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