Cоветы по написанию сценариев Visual Studio с PowerShell

Грэг Дункан

На Build 2014 все сосредоточились, главным образом, на ключевых докладах и сессиях, которые можно посмотреть здесь https://channel9.msdn.com, здесь http://www.buildwindows.com/ и, наконец здесь https://channel9.msdn.com/events/build/2014, поэтому сегодня я собираюсь рассказать о приеме Стюарта Лика (Stuart Leeks), посвященном тому, как рационализировать показ презентаций в Visual Studio...

Сценарии в VisualStudio с помощью PowerShell – классно для демонстраций

Обзор

В этом сообщении я покажу как автоматизировать задачи при открытии решения в Visual Studio.

NuGetприводит PowerShell

В великой схеме вещей не встречалось настолько же великого с момента появления NuGet, и я едва могу вспомнить, как я обходился без него. Кроме обычных преимуществ, мне нравится консоль диспетчера пакетов. Да, я фанат клавиатуры (и назначил сочетания клавиш для нее), и могу легко добавлять пакеты, не отрывая рук от клавиатуры. Но консоль также дает мне PowerShell внутри VisualStudio!

Работая в консоли можно использовать стандартные командлеты и псевдонимы PowerShell. Наприме, dir или Get-ChildItem будут работать (и вы начнете с каталога решения, что очень удобно!). NuGet также добавляет и другие командлеты – Install-Package и Get-Project. Кроме этого, вы получаете дополнительный контекст, так переменная $dte дает доступ к верхнему уровню объекта DTE для API автоматизации Visual Studio. Поэтому введя $dte.Solution.FullName, вы получите полный путь к текущему решению.

Сценариипакета NuGet

...

Проблема?

Когда я готовлю демонстрации, то стараюсь быть разумно дисциплинированным и не забывать делать следующее:

  • Создавать сценарии, возвращающие демонстрационный каталог в исходное состояние
  • Писать заметки, включающие список файлов, открываемых в этой демонстрации, какие страницы на сайте открываются (я часто выступаю перед веб-разработчиками)
  • Создавать копию демонстрационного решения в окончательной форме – это работает тогда, когда кажется, что ничто не идет правильно, и вы просто хотите пропустить все до конца и при этом что-то показать!

Некоторое время тому назад я выступал как содокладчик с моим коллегой, который внезапно закончил свою часть и надо было начинать мне. Это был небольшой вызов, так как некоторые демонстрации нужно было сконфигурировать после загрузки решения, чтобы сохранить порядок выступления. Как раз тогда не было времени сделать это, и я задумался, как решить такую проблему. Решение? NuGet и сценарий PowerShell!

Соединяем кусочки вместе

Решение оказалось совсем простым: создаем пакет NuGet с файлом Init.ps1, который запускается при загрузке решения, затем находим и выполняем известный сценарий в решении.

...

Дополнительные замечания

Я не собираюсь вдаваться в детали, так как думаю, что концепция понятна, если вы знаете что является движущими частями. Но есть пара других моментов, которые объяснены недостаточно.

Предотвращение исполнения _ startup . ps1...

Дополнительные команды

Я обнаружил, что есть несколько общих вещей, которые хотелось бы сделать в моем сценарии _startup.ps1, поэтому я добавил их в виде командлетов. Объектная модель DTE для Visual Studio очень мощная, но не слишком дружественная к пользователям clip_image002

  • Open-SolutionFile. Принимает имя открываемого файла. Обычно моя демонстрация определяет открываемые файлы в процессе инициализации, так что это удобно.
  • Open-ProjectFile. Принимает имя проекта и имя файла и открывает файл внутри этого проекта. Это просто сохраняет шаг по добавлению каталога проекта в имя файла.
  • Close-AllDocuments. Если я собираюсь открыть файлы, которые мне нужны и не хочу никаких других файлов, то сначала я вызываю этот командлет.
  • Invoke-SolutionBuild. Собрать решение!
  • Start-Solution. Собрать и запустить решение.

Командлеты Open-SolutionFile и Open-ProjectFile оба возвращают объект EnvDTE.Window, поэтому можно вызвать его методы, т.е. ... [Щелкните здесь, чтобы увидеть все сценарии, советы и код]