Visual studio настройка окон

Обновлено: 01.05.2024

В данном разделе рассматривается расширение Visual Studio через интеграцию в среду пользовательского инструментального окна. Будут затронуты вопросы регистрации и инициализации пользовательских окон в модулях вида VSPackage и Add-In, отображения в окне пользовательских компонентов, обработки событий и контроля состояния окна.

Эта статья устарела. Обновленную версию этой статьи вы можете прочитать здесь.

Введение

Инструментальные окна (tool window) — дочерние окна MDI (Multiple Document Interface) интерфейса Visual Studio предназначенные для вывода информации. Solution Explorer и Error List являются инструментальными окнами. Обычно содержимое инструментального окна не связывается с файлом и не содержит редакторов, для этого существуют специальные окна документов.

Модуль-расширение PVS-Studio интегрирует в IDE несколько инструментальных окон, главным из которых является окно вывода результатов анализа (PVS-Studio Output Window). Из него уже можно открыть другие окна, например окно поиска по списку. Окно вывода результатов PVS-Studio доступно из главного меню Visual Studio (PVS-Studio -> Show PVS-Studio Output Window) и автоматически открывается при запуске анализа.

В большинстве случаев IDE создаёт и использует только один экземпляр каждого инструментального окна (single instance window), причём экземпляр этого окна остаётся открытым до конца сеанса работы среды. При нажатии на кнопку закрытия такое окно скрывается, а при последующем обращении к нему оно вновь становится видимым, причём все отражённые в нём данные сохраняются. Однако создание и интеграция в IDE Multi-Instance пользовательских окон (т.е. окон, которые можно открывать по нескольку раз) также возможны. Инструментальное окно может быть закреплено за определённым контекстом интерфейса IDE (т.н. динамические окна). Такое окно будет автоматически показано пользователю при его попадании в данный контекст.

Интеграция инструментальных окон в IDE поддерживается в VSPackage и Add-In модулях расширений (причём реализации для этих видов модулей различаются), и требует задания их первоначальных параметров и регистрации в системном реестре.

Устанавливаемый вместе с Visual Studio SDK шаблон проекта VSPackage позволяет сгенерировать пользовательское инструментальное окно для создаваемого им проекта пакета модуля-расширения. Этот проект уже должен содержать все рассмотренные ниже элементы, поэтому его удобно использовать как образец при знакомстве с процессом интеграции пользовательских окон в Visual Studio.

За непосредственную регистрацию пользовательского инструментального окна в модуль VSPackage отвечает атрибут ProvideToolWindow класса Package:

Рассмотрим некоторые из параметров данного атрибута. Typeof указывает на пользовательскую реализацию клиентской области окна (ToolWindowPane). Параметр MultiInstances позволяет использовать окно в Multi-Instance режиме, т.е. с возможностью открывать несколько экземпляров окна одновременно. Параметры Orientaton, Size и Style позволяют задать первоначальное положение окна при первом открытии. Стоит помнить, что после первого открытия окна IDE будет сохранять его положение при дальнейших запусках среды. Transient определяет, будет ли окно открыто сразу после загрузки среды Visual Studio в случае, если оно уже было открыто в предыдущем сеансе IDE.

Стоит заметить, что инициализация пользовательского окна в VSPackage (что будет описано чуть позднее) не обязательно совпадает с инициализацией самого подкласса Package, для которого мы и указываем данный регистрационный атрибут. Например, после реализации инструментального окна для плагина PVS-Studio мы сталкивались с ситуацией, при которой окно оказывалось открытым (но не активным) среди нижних вкладок окон среды сразу после запуска Visual Studio, даже несмотря на то, что в атрибут ProvideToolWindow было передано Transient = true. При этом, несмотря на то, что сам плагин проходил инициализацию всегда на старте IDE, само окно оказывалось не до конца инициализированным вплоть до первого к нему обращения, что в частности было видно по неподгруженной иконке на вкладке.

Для окна может быть задана динамическая область видимости с помощью атрибута ProvideToolWindowVisibility, например:

В данном примере окно должно быть автоматически открыто при вхождении в UI контекст "Solution Exists".Заметьте, что для каждого пользовательского окна необходимо указывать отдельный атрибут, передавая его тип в качестве первого аргумента.

Для создания и отображения инструментального окна из VSPackage можно воспользоваться методом FindToolWindow класса Package. Данный метод возвращает ссылку на указанный toolwindow объект, создавая его в случае необходимости (при первом запуске single-instance окна). Пример вызова и отображения single-instance окна:

В приведённом примере окно будет либо создано при первом вызове, либо показано, если оно было ранее скрыто. При этом третий параметр метода FindToolWindow типа bool определяет, будет ли создан новый экземпляр окна в случае, если он не был найден.

Для создания Multi-Instance инструментальных окон можно использовать метод CreateToolWindow, позволяющий создать окно с заданным идентификатором. Тогда метод вызова toolwindow будет выглядеть следующим образом:

Обратите внимание, что теперь в метод FindToolWindow в качестве 3-его аргумента передаётся false, т.е. мы ищем свободный индекс, не инициализируя новые экземпляры окна.

При работе с single-instance окном, после первого вызова среда будет запоминать его последующие положение и размеры, сохраняя их каждый раз перед закрытием. Однако если по какой-либо причине всё же потребуется вручную задать размер и положение окна, это можно сделать с помощью метода SetFramePos класса IVsWindowFrame:

Стоит помнить, что вызов метода SetFramePos() должен выполняться после вызова метода Show().

Создание и вызов окна в Add-In

Для модуля типа Add-In инициализировать пользовательское инструментальное окно можно с помощью методов EndDTE интерфейса Window2:

В приведённом примере создаётся пользовательское инструментальное окно, использующее класс MyToolWindowControl.MyUserControl в качестве клиентской области. Класс MyToolWindowControl.MyUserControl может находиться либо в той же assembly, что и инициализирующий его add-in, либо в отдельной библиотеке, имеющей полную COM видимость (например, через опцию Register for COM interop в настройках проекта). В качестве MyUserControl может быть использован стандартный композитный пользовательский подклас UserControl.

Реализация пользовательского инструментального окна в модуле VSPackage

Инструментальные окна состоят из каркаса-рамки клиентской области. При этом каркас окна предоставляется средой и отвечает за стыковку с другими компонентами интерфейса (docking), размер и положение окна. Клиентская область (pane) отображает содержимое окна, контролируемое пользователем. Инструментальные окна могут содержать пользовательские WinForms и WPF компоненты и предоставляют возможность обрабатывать такие стандартные события, как например OnShow, OnMove и т.п.

Пользовательское инструментальное окно, а точнее его клиентская область, реализуется путём наследования от класса, реализующего стандартное пустое окно IDE — ToolWindowPane:

Атрибут Guid уникально идентифицирует каждое пользовательское окно. В случае если модуль создаёт несколько окон разного типа, каждое из них должно иметь свой уникальный Guid. Подкласс ToolWindowPane может в дальнейшем быть модифицирован для отображения в нём пользовательских компонентов и управления его состоянием.

Хостинг пользовательских компонентов

Базовый класс ToolWindowPane реализует пустое инструментальное окно среды. Наследование от данного класса позволяет отобразить в этом окне пользовательские WinForms или WPF компоненты.

До версии Visual Studio 2008 инструментальные окна нативно поддерживали отображение WinForms пользовательских компонентов, а также могли отображать WPF компоненты с помощью WPF Interoperability компонента ElementHost. Начиная с Visual Studio 2010, инструментальные окна стали основываться на технологии WPF, но всё еще поддерживают загрузку и отображение WinForms компонентов в режиме совместимости.

Для отображения в окне пользовательского WinForms компонента можно воспользоваться переопределённым свойством Window у ToolWindowPane:

Начиная с версии Visual Studio 2010 появилась возможность нативно отображать WPF компоненты. Для этого нужно передать ссылку на ваш WPF компонент полю Content базового класса:

Заметьте, что одновременное использование этих двух методов не поддерживается. При назначении WPF компонента в base.Content переопределённое свойство Window будет проигнорировано.

Обработка событий в инструментальных окнах

Клиентская область инструментального окна (представленная нашим наследником от класса ToolWindowPane) может обрабатывать события взаимодействия пользователя с окном IDE. Для того чтобы подписаться на обработку этих событий можно воспользоваться интерфейсом IVsWindowFrameNotify3. Приведём пример реализации данного интерфейса:

Как видно из приведённого кода, реализующий интерфейс класс WindowStatus может обрабатывать такие изменения в состоянии пользовательского окна, как изменение размера, положения на экране, видимости и т.п. Теперь подпишем наше окно на обработку данных событий. Для этого переопределим метод OnToolWindowCreated у нашего класса-наследника ToolWindowPane:

Контроль состояния окна

Контроль состояния окна можно осуществлять с помощью обработчиков событий нашей реализации интерфейса IVsWindowFrameNotify3.

Метод OnShow сообщает модулю-расширению об изменении статуса видимости инструментального окна, позволяя определить появление/скрытие окна для пользователя, например, когда пользователь переключает вкладку с одного окна на другое. Текущее состояние видимости можно узнать с помощью параметра fShow, соответствующего списку __FRAMESHOW.

Метод OnClose сообщает о закрытии каркаса окна, позволяя задать необходимое поведение IDE с помощью параметра pgrfSaveOptions, управляющего отображением диалога о сохранении открытого в окне документа (__FRAMECLOSE).

Метод OnDockableChange информирует модуль об изменении docking статуса окна. Параметр fDockable показывает, сцеплено ли окно с каким-либо другим, а остальные параметры указывают новый размер и координаты окна до или после сцепления.

Параметры методов OnMove и OnSize сообщают новые координаты и/или размер окна при его перетаскивании и маштабировании.

Если вы не знакомы с системой Visual Studio, то поведение многочисленных инструментальных окон может показаться вам неправильным, потому что они появляются в случайных местах, а затем появляются и исчезают по мере того, как вы пишете код (этап проектирования) и выполняете его (время выполнения). На самом деле система Visual Studio 2013 запоминает расположение инструментальных окон для каждого из этих режимов работы, что позволяет оптимизировать разработку и отладку кода.

Открывая разные элементы в окне Solution Explorer, вы увидите множество инструментальных панелей, пересекающих верхнюю часть экрана, в зависимости от типа открытого файла. Каждая инструментальная панель имеет встроенную связь с конкретными расширениями файла, поэтому система Visual Studio знает, какую инструментальную панель отобразить, когда открывается тот или иной файл. Если вы закроете инструментальную панель в тот момент, когда файл с соответствующим расширением открыт, система Visual Studio запомнит ее, когда вы в будущем откроете файл с таким же расширением.

Связь между инструментальными панелями и расширениями файлов можно изменить с помощью команды Customize (Tools --> Customize). Выберите соответствующую инструментальную панель и щелкните на кнопке Reset.

Просмотр окон и инструментальных панелей

Если инструментальное окно или панель были закрыты, то иногда их трудно найти снова. К счастью, доступ к большинству наиболее часто используемых инструментальных окон можно получить с помощью окна View. Другие инструментальные окна, в основном связанные с отладкой, расположены под меню Debug.

Все инструментальные панели, доступные в системе Visual Studio 2013, перечислены в пункте меню View --> Toolbars. Каждая инструментальная панель, которую можно увидеть в текущий момент, отмечена галочкой возле соответствующего пункта меню. Вы можете также открыть список инструментальных панелей, щелкнув правой кнопкой мыши на любом свободном месте в области инструментальной панели в верхней части окна Visual Studio.

Если инструментальная панель является видимой, можете настроить ее с помощью кнопок, команды View --> Toolbars --> Customize или меню Tools. В качестве альтернативы, как показано на рисунке ниже, выбрав стрелку, направленную вниз и расположенную в конце инструментальной панели, можно открыть список всех кнопок, доступных на панели, и проверить кнопки, которые вы хотите на ней увидеть:

Список всех кнопок панели инструментов Visual Studio

Навигация по открытым элементам

Открыв множество элементов, вы обнаружите, что вышли за пределы области редактирования и больше не видите все открытые закладки. Разумеется, вы можете вернуться в окно Solution Explorer и выбрать конкретный элемент. Если он уже открыт, то будет показан на экране без возвращения в его сохраненное состояние. Однако этот способ неудобен, если требуется найти элемент управления в окне Solution Explorer.

К счастью, в системе Visual Studio 2013 есть много комбинаций клавиш для получения списка открытых элементов. Как и большинство документно-ориентированных приложений, система Visual Studio имеет меню Window. Когда вы открываете элемент, его заголовок добавляется в нижний раздел этого меню. Для того чтобы отобразить открытый элемент, только что выбранный в меню Window, щелкните на пункте меню Window.

В качестве альтернативы можно использовать выпадающее меню в окне области закладок области редактирования. На рисунке ниже показан раскрывающийся список открытых элементов, в котором можете выбрать требуемый элемент:

Открытие скрытых вкладок в Visual Studio

Правая часть рисунка выше совпадает с левой частью, за исключением выпадающей пиктограммы. Это меню также содержит стрелку, направленную вниз, но на этот раз она имеет черту, параллельную верхней границе окна. Эта черта означает, что количество закладок превышает число закладок, которые могут поместиться в верхней части области редактирования.

Еще один способ навигации по открытым элементам - нажать комбинацию клавиш Ctrl+Tab , которая открывает временное окно, показанное на рисунке ниже:

Перемещение между открытыми вкладками в Visual Studio

Это окно является временным потому, что исчезнет, когда вы отпустите клавишу Ctrl. Но пока она нажат окно остается открытым, для перемещения из одного открытого окна в другое можно использовать клавиши навигации (со стрелками ←↑→↓ ) или клавишу табуляции ( Tab ).

Окно, открывающееся после нажатия клавиш Ctrl+Tab , разделено на три части: активные инструментальные окна, активные файлы (эти элементы должны быть действительно активными, потому что некоторые элементы могут соответствовать нескольким файлам) и окно просмотра выбранного элемента. По мере увеличения количества активных файлов или инструментальных окон нижняя граница этого окна отодвигается вниз, пока количество элементов не достигнет пятнадцати, после чего создастся дополнительный столбец.

Если вы достигли момента, когда возникает дополнительный столбец активных файлов, то следует подумать о том, не закрыть ли некоторые или все не используемые файлы. Чем больше файлов открыто в системе Visuali Studio 2013, тем больше памяти она использует и тем медленнее работает.

Щелкнув правой кнопкой мыши на закладке, содержащей открытый элемент, вы увидите скрытое контекстное меню, обеспечивающее быстрый доступ к наиболее часто выполняемым задачам, таким как сохранение или закрытие файла, связанного с данной закладкой. Наиболее полезными действиями являются команды Close All But This и Open Containing Folder. Эти команды самоочевидны: первая из них закрывает все закладки, за исключением той, на которой вы щелкнули, чтобы открыть контекстное меню, а вторая - открывает каталог, содержащий файл, в проводнике Windows. Поскольку все окна являются плавающими, у них есть команды Float и Dock as Tabbed Document, которые становятся доступными в зависимости от того, в каком состоянии находится закладка.

Плавающие окна

Каждое инструментальное окно имеет положение, заданное по умолчанию, которое можно восстановить с помощью команды меню View. Например, команда View --> Toolbox открывает инструментальное окно Toolbox, прикрепленное к левому краю окна Visual Studio. Помимо того, что инструментальное окно может быть открыто и прикреплено в краю экрана, оно может находиться в двух состояниях: закрепленном и открепленном. Как уже говорилось, вы можете переключаться между этими состояниями, щелкая на значке вертикальной булавки, чтобы открепить инструментальное окно, или на значке горизонтальной булавки, чтобы закрепить его.

Открепленное окно смещается от края рабочей области интегрированной среды разработки, оставляя видимым дескриптор, в котором отображается заголовок данного инструментального окна. Такая анимация может показаться надоедливой и занимает много времени, если инструментальные окна оставить открепленными. Эту ситуацию можно контролировать либо с помощью узла Environment диалогового окна Options, указав, должна ли система Visual Studio автоматически учитывать опыт зрительного восприятия, основанный на эффективности работы клиента, либо отключив опцию Enable rich client visual experience.

Большинство разработчиков устраивает расположение инструментальных окон, заданное по умолчанию, но иногда они хотят самостоятельно указать место, где должно появляться инструментальное окно. Среда Visual Studio 2013 имеет изощренную систему управления компоновками инструментальных окон. Ранее было показано, как использовать выпадающие меню, а также кнопки Pin и Close, расположенные в верхней части инструментального окна, чтобы сделать плавающим (floating) или закрепляемым (dockable) не только окно, но и часть основной области редактирования (используя команду Tabbed Document).

Если инструментальное окно является закрепляемым, то у вас есть множество возможностей для управления его местоположением. На рисунке ниже показана верхняя часть окна Properties, которое было перетащено вправо из своего первоначального положения, заданного по умолчанию. Для того чтобы начать перетаскивание, убедитесь, что инструментальное окно находится в закрепленном состоянии, а затем щелкните либо на заголовке, расположенном в верхней части окна, либо на ярлыке, расположенном внизу окна, и перетащите курсор мыши в требуемом направлении. Если вы щелкнете на заголовке, то увидите, что все инструментальные окна в этом разделе интегрированной среды разработки также переместятся. Щелкнув на ярлыке, вы переместите только соответствующее инструментальное окно.

Перемещение панели в Visual Studio

Перетаскивая инструментальное окно по рабочей области системы Visual Studio 2013, вы увидите полупрозрачные пиктограммы, появляющиеся в разных местах. Эти пиктограммы оказывают большую помощь при выборе точной позиции. На рисунке ниже показано, окно Data Sources было прикреплено к левому краю. Затем, когда окно Properties было установлено над левой пиктограммой средней части экрана, в существующем инструментальном окне вновь возникла голубая тень. Это означает, что инструментальное окно Properties было прикреплено к правому краю инструментального окна Data Sources и будет видимым, если выбрана именно эта компоновка окна. Если бы была выбрана левая пиктограмма, то инструментальное окно Properties было бы снова прикреплено к левому краю рабочей области, но на этот раз слева от окна Data Sources.

Пример простой компоновки двух панелей в Visual Studio

Кроме того, если инструментальное окно Properties поместить поверх инструментального окна Data Sources, как показано на следующем рисунке, то средняя часть будет размещена поверх существующего инструментального окна. Это значит, что инструментальное окно Properties будет размещено в существующем инструментальном окне. Перемещая окно поверх разных квадрантов, вы увидите, что голубая тень означает, где будет размещено инструментальное окно, когда вы отпустите кнопку мыши. На рисунке ниже это означает, что инструментальное окно Properties появится ниже инструментального окна Data Sources:

Размещение панели внутри другой панели

Если вы работаете с большим экраном или с несколькими экранами, целесообразно уделить особое внимание удобной компоновке часто используемых инструментальных окон. Если вы работаете с несколькими экранами, то использование плавающих инструментальных окон означает, что вы можете размещать их далеко от основной области редактирования, обеспечивая максимальную площадь экрана. Если у вас маленький экран, то придется постоянно указывать, какое окно является видимым, и в этом случае важно хорошо разбираться в компоновке закрепленных окон.

Но индивидуальные потребности отличаются от усредненных! Поэтому настройка Visual Studio необходима. Я буду рассматривать настройки исходя из моих личных предпочтений и потребностей web разработки т.к. это моя повседневная деятельность. При этом важно заметить, что мои настройки применимы, хотя бы в части, и к другим версиям программы, а также к другим направлениям разработки

Убираю стандартную панель инструментов

Потому, что она мне не нужна. Хотя функциями размещенными на ней я постоянно пользуюсь. Но для этого использую клавиатуру, а место на экране она занимает. Особенно критично место на экране если приходится работать на ноутбуке.


стандартная панель инструментов

Сохранение файла: Ctrl + S, Сохранение всех файлов: Ctrl+Shift+S

Отмена и повтор действия: Ctrl+Z и Ctrl+Y соответственно


стартовая страница VS

Захожу в меню Options > Tools. Далее в появившемся окне выбираю Environment > Startup. Выбираю Show empty environment. И заодно выключаю галочку Donwload content every. К чему мне подгрузка контента из интернета? Не зачем. Когда надо тогда в браузере посмотрю.

отключение стартовой страницы отключение стартовой страницы 2

Цветовая схема Visual Studio

Существует три схемы Light, Dark, Blue (Светлый, Темный, Синий).

Важно: при смене цветовой схемы изменятся и размеры шрифтов. Поэтому все манипуляции с размерами шрифтов лучше проводить после того как вы определились с выбором цветовой схемы.


черная цветовая схема


синяя цветовая схема

Глаза программиста основной инструмент. Даже наличие мозгов не так критично( Можно не сильно напрягаясь делать простенькие сайтики) Но почему-то об этом не думают разработчики студии. Размер шрифтов сразу же напрягает зрение. А сидеть в напряжении глаз полный рабочий день не стоит.

Кстати, минимальное расстояние от глаз до монитора это 50 см. Очень рекомендую соблюдать эту норму. Вообще, это тема отдельной статьи правильная организация рабочего места, которую надо написать.


шрифты в VS в базе

Настройки шрифтов: Захожу в меню Options > Tools. Далее в появившемся окне выбираю Environment > Fonts and Colors.

Для себя я решил увеличить размер букв на 1 пункт. Вы же для себя подберите наиболее оптимальный размер сами. Возможно понадобится и больше. Главный критерий : глаза не должны испытывать дискомфорта.

Увеличиваю размер в текстовом редакторе (text editor). Это все таки основной рабочий инструмент с наибольшим временем использования.


шрифты в редакторе

Аналогично для меню и общего интерфейса:

По умолчанию тут нельзя сменить размер шрифта (кегль). Для этого нужно сменить сам шрифт с автоматического. Тут сразу возникнет вопрос: а на какой шрифт сменить? В Windows 7 по умолчанию Segoe UI. Если выбрать этот вариант, то визуально ничего не изменится. И вот теперь уже можно сменить кегль.


шрифты в меню

Ну вот. Стало значительно лучше:


шрифты в VS после настройки

На этом первоначальную настройку можно закончить, хотя процесс этот очень сильно индивидуальный.

По моему скромному мнению стоковая Arduino IDE представляет из себя убогий блокнот не соответствующий современным требованиям для разработчика. Многие сторонние блокноты имеют на порядок больше функционала, чем среда разработки Arduino IDE, а они всего лишь блокноты. Для новичка это особо актуально иметь среду разработки которая всеми силами помогает тебе писать правильно с подсветкой синтаксиса, автодополнением , подсветкой ошибок на лету, подсказками, быстрыми переходами и т.д., а самое главное имеется режим отладки во время исполнения кода в микроконтроллере и все это есть в Visual Studio 2019 с расширением vMicro. Но есть и другая сторона медали: данное расширение теперь платное и стоит не так уж дешево. Имеется триальный период использования в 90дней, без возможности отладки. И никто не отменял глюки и непонятное поведение этого расширения.

Я узнал о данном расширении совсем недавно и имею посредственное представление о его возможностях.

Установка расширения vMicro в Visual Studio 2019 Community

Данное расширение можно поставить начиная с Visual Studio 2015. Для работы расширения у вас уже должно стоять Arduino IDE.

Запускаем Visual Studio 2019 и жмем продолжить

Запуск Visual Studio 2019

В меню "Расширения" нажимаем "Управление расширениями". В открывшемся окне с лева выбираем «В сети» и справа в поиск вбиваем Arduino. Жмем скачать.

Установка vMicro Visual Studio 2019

Теперь закрываем Visual Studio 2019, начинается процесс установки.

Установка vMicro Visual Studio 2019

В открывшемся окне жмем «Изменить»

Установка vMicro Visual Studio 2019

Установка завершена, жмем «Закрыть». Запускам Visual Studio 2019. Жмем «Создать проект» выбираем Arduino project и проходим мастер создания проекта.

Установка vMicro Visual Studio 2019

В какой-то из моментов у вас выскочит окно конфигурации расширения, где необходимо указать путь куда установлена Arduino IDE.

Установка vMicro Visual Studio 2019

Основные элементы управлением расширением выведено в отдельную строку на панели инструментов. Все тоже самое, что и в родной Arduino IDE.

vMicro в Visual Studio 2019

Ошибки, глюки и проблемы

Я использую ОС Windows 10 и столкнулся со следующими проблемами.

2)Если вы используете сторонние библиотеки в своем проекте, то необходимо прописать пути к ним в проекте. Справа на проекте правой клавишей мыши жмем "свойство", переходим в «Каталоги VC++» - "Включаемые каталоги" – изменить и добавляем пути к исходникам включаемых библиотек.

vMicro в Visual Studio 2019
vMicro в Visual Studio 2019

Учтите что Debug и Release имею независимые настройки среды т.е. поменяв этот профиль вы поменяете настройки среды для проекта.

Если после добавления путей к файлам библиотек у вас возникают ошибки в самих библиотеках, в которых компилятор ругается на заголовочные файлы, то вам необходимо просто продублировать подключения этих библиотек в основном скетче.

Читайте также: