Cоветы по написанию сценариев Visual Studio с PowerShell
На Build 2014 все сосредоточились, главным образом, на ключевых докладах и сессиях, которые можно посмотреть здесь https://channel9.msdn.com, здесь https://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 очень мощная, но не слишком дружественная к пользователям
- Open-SolutionFile. Принимает имя открываемого файла. Обычно моя демонстрация определяет открываемые файлы в процессе инициализации, так что это удобно.
- Open-ProjectFile. Принимает имя проекта и имя файла и открывает файл внутри этого проекта. Это просто сохраняет шаг по добавлению каталога проекта в имя файла.
- Close-AllDocuments. Если я собираюсь открыть файлы, которые мне нужны и не хочу никаких других файлов, то сначала я вызываю этот командлет.
- Invoke-SolutionBuild. Собрать решение!
- Start-Solution. Собрать и запустить решение.
Командлеты Open-SolutionFile и Open-ProjectFile оба возвращают объект EnvDTE.Window, поэтому можно вызвать его методы, т.е. ... [Щелкните здесь, чтобы увидеть все сценарии, советы и код]
Comments
- Anonymous
May 28, 2014
Vote for a new version of the VB6 programming language visualstudio.uservoice.com/.../3440221-bring-back-classic-visual-basic-an-improved-versi