Сегодня я хочу рассказать о том, как можно централизованно управлять настройками ReSharper на уровне команды разработчиков. Под настройками я понимаю настройки форматтера, Live Templates и настройки ReSharper. Они могут быть экспортированы и упакованы в так называемые Declarative Extensions.
На данный момент все плагины для ReSharper представляют собой стандартные NuGet пакеты. Это позволяет распространять их через официальный NuGet feed от JetBrains или публиковать их в частном закрытом NuGet сервере внутри компании.
Для экспорта настроек и Live Templates перейдём в меню RESHARPER->Manage Options.
![Manage Options](https://habrastorage.org/r/w1560/files/ccc/806/b37/ccc806b37a694b60b144e1c2c760dfbd.png)
В данном диалоге нужно выбрать уровень (Layer) настроек, который мы хотим экспортировать.
Нажмём кнопку «Import/Export settings».
![export settings and templates](https://habrastorage.org/r/w1560/files/9fe/141/6dd/9fe1416ddc9b4d6285e816f965621b93.png)
В окне «Export To File» отметим узлы «Code Style» и «LiveTemplates». Затем нужно указать директорию и имя DotSettings файла, в который будут записаны экспортируемые настройки.
Как только настройки экспортированы, можно приступать к созданию NuGet пакета. Необходимо описать .nuspec файл. Для ReSharper 8.2 он будет выглядеть следующим образом:
В случае с ReSharper 9.1 .nuspec файл будет немного отличаться. Узел Dependencies должен указывать версию «Wave», а не ReSharper:
Так же нужно будет изменить target:
Где «YourCompany.Settings» это идентификатор NuGet пакета.
Теперь можно собрать пакет, выполнив команду:
Если мы выполнили предыдущие шаги без ошибок, то рядом с nuspec файлом будет создан пакет «YourCompany.Settings.1.0.0.nupkg».
Как упоминалось выше, ReSharper может использовать следующие источники NuGet пакетов:
Публикация пакета на NuGet сервере практически ничем не отличается от публикации на nuget.org.
В данной статье для простоты, в качестве NuGet feed, я буду использовать папку в файловой системе. Данная папка должна быть доступна с компьютера каждого программиста в команде. Например, это может быть общий exchange folder на сетевом диске.
После того, как пакет с расширением опубликован, нам нужно зарегистрировать новый источник расширений. Для этого перейдём в RESHARPER -> Options...-> Environment -> Extension Manager.
![Options-Environment dialog](https://habrastorage.org/r/w1560/files/88a/a49/ada/88aa49adaa8d4f2ab08525f938e51684.png)
Нажмём «добавить» (Add), укажем имя в поле «Name» и путь до Артефактов, NuGet сервера или директории в поле «Source».
![add custom gallery](https://habrastorage.org/r/w1560/files/ea9/2b5/40e/ea92b540ebd24cdc8ae74418566ba681.png)
Для установки расширения необходимо перейти в меню RESHARPER -> Extension Manager.
В поиске нужно найти наш пакет и нажать Install.
![install custom plugin](https://habrastorage.org/r/w1560/files/6ac/833/50c/6ac83350cdca49c6a8fc14510ad1c95e.png)
Проверим, что ReSharper обнаружил новые настройки. Откроем диалог Manage Options и убедимся, что новый слой настроек отображается на экране.
![new settings layer](https://habrastorage.org/r/w1560/files/91b/cfd/a89/91bcfda8978242179926acafafeac341.png)
Теперь каждый член команды может использовать актуальную версию настроек. В случае изменения или обновления настроек достаточно лишь опубликовать новую версию плагина, и ReSharper автоматически найдёт обновление и проинформирует разработчика.
На данный момент все плагины для ReSharper представляют собой стандартные NuGet пакеты. Это позволяет распространять их через официальный NuGet feed от JetBrains или публиковать их в частном закрытом NuGet сервере внутри компании.
Экспорт настроек
Для экспорта настроек и Live Templates перейдём в меню RESHARPER->Manage Options.
![Manage Options](https://habrastorage.org/files/ccc/806/b37/ccc806b37a694b60b144e1c2c760dfbd.png)
В данном диалоге нужно выбрать уровень (Layer) настроек, который мы хотим экспортировать.
Нажмём кнопку «Import/Export settings».
![export settings and templates](https://habrastorage.org/files/9fe/141/6dd/9fe1416ddc9b4d6285e816f965621b93.png)
В окне «Export To File» отметим узлы «Code Style» и «LiveTemplates». Затем нужно указать директорию и имя DotSettings файла, в который будут записаны экспортируемые настройки.
Подготовка NuGet пакета
Как только настройки экспортированы, можно приступать к созданию NuGet пакета. Необходимо описать .nuspec файл. Для ReSharper 8.2 он будет выглядеть следующим образом:
<?xml version="1.0"?>
<package>
<metadata>
<id>YourCompany.Settings</id>
<version>1.0.0</version>
<title>TeamSettings</title>
<authors>Your name</authors>
<owners>Your Company</owners>
<projectUrl>http://your-company.com</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>
Team settings and live templates for ReSharper
</description>
<copyright>Copyright Your Company</copyright>
<dependencies>
<dependency id="ReSharper" version="8.2" />
</dependencies>
<releaseNotes>
</releaseNotes>
<tags>settings</tags>
</metadata>
<files>
<file src="..\Settings\" target="ReSharper\v8.2\settings\" />
</files>
</package>
В случае с ReSharper 9.1 .nuspec файл будет немного отличаться. Узел Dependencies должен указывать версию «Wave», а не ReSharper:
<dependencies>
<dependency id="Wave" version="[2.0]" />
</dependencies>
Так же нужно будет изменить target:
<files>
<file src="..\Settings\"
target="DotFiles\Extensions\YourCompany.Settings\settings\" />
</files>
Где «YourCompany.Settings» это идентификатор NuGet пакета.
Теперь можно собрать пакет, выполнив команду:
nuget.exe pack nuspec-file-name.nuspec
Если мы выполнили предыдущие шаги без ошибок, то рядом с nuspec файлом будет создан пакет «YourCompany.Settings.1.0.0.nupkg».
Публикация NuGet пакета
Как упоминалось выше, ReSharper может использовать следующие источники NuGet пакетов:
- Официальный feed от JetBrains
- Любой сторонний NuGet сервер (например ProGet)
- Артефакты TeamCity
- Локальная или сетевая папка
Публикация пакета на NuGet сервере практически ничем не отличается от публикации на nuget.org.
В данной статье для простоты, в качестве NuGet feed, я буду использовать папку в файловой системе. Данная папка должна быть доступна с компьютера каждого программиста в команде. Например, это может быть общий exchange folder на сетевом диске.
Использование кастомного NuGet feed
После того, как пакет с расширением опубликован, нам нужно зарегистрировать новый источник расширений. Для этого перейдём в RESHARPER -> Options...-> Environment -> Extension Manager.
![Options-Environment dialog](https://habrastorage.org/files/88a/a49/ada/88aa49adaa8d4f2ab08525f938e51684.png)
Нажмём «добавить» (Add), укажем имя в поле «Name» и путь до Артефактов, NuGet сервера или директории в поле «Source».
![add custom gallery](https://habrastorage.org/files/ea9/2b5/40e/ea92b540ebd24cdc8ae74418566ba681.png)
Установка расширения
Для установки расширения необходимо перейти в меню RESHARPER -> Extension Manager.
В поиске нужно найти наш пакет и нажать Install.
![install custom plugin](https://habrastorage.org/files/6ac/833/50c/6ac83350cdca49c6a8fc14510ad1c95e.png)
Проверим, что ReSharper обнаружил новые настройки. Откроем диалог Manage Options и убедимся, что новый слой настроек отображается на экране.
![new settings layer](https://habrastorage.org/files/91b/cfd/a89/91bcfda8978242179926acafafeac341.png)
Теперь каждый член команды может использовать актуальную версию настроек. В случае изменения или обновления настроек достаточно лишь опубликовать новую версию плагина, и ReSharper автоматически найдёт обновление и проинформирует разработчика.
Only registered users can participate in poll. Log in, please.
Как ваша команда работает с настройками?
15.79% Один репозиторий на команду, настройки в репозитории3
0% Один репозиторий на команду, настройки в централизованном хранилище0
15.79% Несколько репозиториев на команду, настройки в каждом репозитории3
10.53% Несколько репозиториев на команду, настройки в централизованном хранилище2
57.89% Не используем общие настройки11
19 users voted. 6 users abstained.