Публикация пользовательского контента при помощи S#.Installer. StockSharp

S#.Installer предоставляет пользователям платформы возможность публиковать собственные приложения, коннекторы, утилиты и другие личные наработки.

Общий порядок опубликования пользовательского контента

  1. В начале необходимо убедиться, что для вашего аккаунта включено разрешение на публикацию контента. Если разрешение уже есть, то в окне S#.Installer вы увидите вкладку "Публикация". Если эта вкладка отсутствует, то напишите нам письмо по адресу info@stocksharp.com. После того как служба технической поддержки включит вашему аккаунту возможность публикации, вкладка должна появиться.
    image6023.png
  2. Далее нужно создать один или несколько продуктов через форму создания/редактирования продуктов на вкладке "Публикация"
  3. После того как продукт создан, нужно дождаться одобрения продукта в службе поддержки. Публиковать контент можно только для одобренных продуктов.
  4. Теперь можно опубликовать первую версию вашего продукта!
  5. Если вы вносите в ваш продукт изменения, S#.Installer позволяет просто опубликовать новую версию, которая сразу станет доступной вашим пользователям.

Создание и редактирование продуктов
Для создания продукта перейдите на вкладку "Публикация", "Мои продукты". Для создания нового продукта нужно нажать кнопку "добавить". Сразу после нажатия кнопки продукт еще не создан, он будет создан только после заполнения формы и нажатия кнопки "сохранить".
Заполните форму нового продукта. Пример заполнения:
image270.png
Замечания по заполнению полей:

  • "идентификатор пакета Nuget": идентификатор должен быть одним словом состоящим из следующих допустимых символов: буквы латиницы, цифры, знак подчеркивания, точка. Идентификатор должен начинаться с буквы.
  • "иконка": выберите файл иконки в формате SVG
  • "категории": одна или несколько категорий, к которым можно отнести продукт
  • "тип контента" определяет что именно будет публиковаться в этом продукте

    • "исходный код" означает публикацию одного или нескольких проектов/решений (.csproj/.sln) с исходным кодом
    • "сборка", "автономная программа", "индикатор", "элемент схемы": публикация готовой библиотеки или приложения собранных в Visual Studio.
    • "схема", "зашифрованная схема": публикация схем для S#.Designer
    • "видео": публикация продукта, содержащего видео файл
    • "другое": публикация произвольной папки со всем содержимым

  • "доступ" определяет модель распространения продукта

    • "свободный доступ": бесплатный продукт, видимый и доступный всем желающим
    • "виден всем доступен после покупки": платный продукт, который можно приобрести через S#.Installer
    • "виден и доступен только выбранным пользователям": закрытый продукт, для которого его доступность для пользователей определяется автором путем ручного добавления и удаления пользователей.

  • "Пользователи с доступом к продукту": только для закрытых продуктов. Определяет список пользователей, которые видят продукт и имеют к нему доступ.
  • "Менеджеры продукта": Определяет список пользователей, которые будут получать специальные уведомления о продукте.

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

  • для типов контента "сборка", "автономная программа", "индикатор", "элемент схемы"

    • вам необходимо вначале построить ваш проект в Visual Studio в конфигурации Release.
    • на вашем компьютере должен быть установлен .NET SDK 5
    • для корректной работы у ваших пользователей, ваш проект должен ссылаться на другие библиотеки или проекты только посредством ссылок PackageReference на пакеты NuGet. Если вы в своем проекте используете прямые ссылки на другие проекты .csproj, то во всех зависимых проектах должны быть правильно прописаны свойства NuGet, такие как id пакета и версия. Все эти зависимые проекты должны быть опубликованы отдельно.

  • для типа контента "исходный код": при публикации папки с исходным кодом подпапки со следующими именами будут проигнорированы: "bin", "obj", ".git", ".vs", ".idea". Все остальные файлы будут включены в опубликованный пакет в соответствующих подпапках.
  • для типа контента "схема", "зашифрованная схема", "видео" нужно выбрать только один публикуемый файл
  • для типа контента "другое": будет опубликован пакет, содержащий все подпапки и файлы указанного каталога.
  • при нажатии кнопки обновить будет выполнен автоматический поиск последней опубликованной версии, а также сгенерирована новая версия путем инкремента последней. Перед публикацией новую версию можно вручную изменить, однако она обязана быть больше предыдущей.
  • по нажатию кнопки "опубликовать" выполняется публикация новой версии. Сразу после этого будет автоматически выполнен поиск текущей версии и только что опубликованная версия появится в поле "текущая версия". Успешное завершение означает что новая версия была опубликована!

image3347.png
Поддержка лицензирования пользовательских продуктов
В созданных продуктах типов "сборка", "автономная программа", "индикатор", "элемент схемы" существует возможность добавить поддержку лицензирования продукта.
Для этого в исходном коде продукта нужно использовать проверку лицензии в следующем формате:
Код

var msg = "StockSharp.Community.u123456.AwesomeApp1".ValidateLicense();
if (!msg.IsEmpty())
    throw new InvalidOperationException("product license is not valid: " + msg);

Для поддержки проверки лицензии нужно добавить в ваш проект ссылку на библиотеку StockSharp.Licensing
В данном случае для примера использовано имя лицензируемой компоненты как "StockSharp.Community.u123456.AwesomeApp1".
Для вашего приложения нужно заменить эту строку на идентификатор пакета Nuget, сгенерированный в процессе создания продукта (см. поле "идентификатор пакета Nuget" в форме создания продукта)
Данный код для проверки лицензии можно использовать только для платных продуктов (значение поля "доступ": "виден всем доступен после покупки"), так как лицензия обновляется только при покупке продукта клиентом.