Проект Visual Studio
Описание.
Экшен Проект Visual Studio позволяет использовать в проекте ZennoDroid проект, созданный в Microsoft Visual Studio. Это открывает неограниченные возможности для написания и отладки кода, а также для подключения внешних библиотек.
В отличие от кубика C# код, где код хранится в самом проекте, здесь код живёт в обычном решении Visual Studio: с классами, наследованием, NuGet-пакетами, точками останова и полноценной отладкой.
Где можно применить:
- Удобная интеграция сторонних библиотек и применение их в коде.
- Создание собственных библиотек для многократного использования в разных проектах.
- Отладка кода в Visual Studio с доступом к устройству и проекту.
Как добавить в проект?
Через контекстное меню: Добавить действие → Свой код → Проект Visual Studio.
Как работать с экшеном?
Кубик может работать в двух режимах: с решением Visual Studio или с уже собранной dll.
Использовать решение Visual Studio.

- Выбор режима работы кубика.
- Путь к решению, в котором находится проект.
- Проект, который будет запускаться при выполнении кубика.
- Конфигурация проекта.
- Флаг объединения выходной dll и зависимостей в один файл с помощью ILRepack.
- Кнопка перехода к режиму Использовать Dll.
- Кнопка Подключиться к Visual Studio.
- Кнопка Создать новый проект Visual Studio.
Использовать Dll.
- Выбор режима работы кубика.
- Путь к dll, которая будет запускаться при выполнении кубика.
Создание проекта и подключение к Visual Studio.
- Visual Studio 2019, 2022 или 2026. Бесплатную версию Community можно скачать на официальном сайте. Если установлено несколько версий, используется самая новая.
- Пакет разработчика для .NET Framework 4.6.2 — конечной платформы проекта (Download .NET SDKs for Visual Studio).
- Добавьте экшен и выберите режим Использовать решение Visual Studio.
- Нажмите кнопку Создать новый проект Visual Studio (1).

Укажите решение, проект и конфигурацию в свойствах кубика и нажмите Подключиться к Visual Studio (2).
- В открывшемся окне заполните название проекта, расположение и название решения, затем нажмите ОК.

- Дождитесь, пока ZennoDroid создаст решение и подключится к Visual Studio.
Подключение обеспечивает взаимодействие между ProjectMaker и Visual Studio: Окно устройства переносится в Visual Studio, поэтому код можно отлаживать с доступом к устройству и проекту. В ProjectMaker на месте окна появляется надпись Браузер находится в решении Visual Studio со ссылкой Показать браузер здесь, а на панели инструментов окна в Visual Studio есть кнопка Return to ProjectMaker — и то, и другое возвращает окно обратно.
Если окно устройства не открылось в Visual Studio автоматически, его можно вызвать: Вид → Другие окна → ZennoDroidToolWindow.
Если расширение не установлено или его версия не совпадает с версией ProjectMaker, программа предложит установить нужную. После установки подключитесь к Visual Studio ещё раз.
Значит расширение не установлено или отключено. В Visual Studio откройте Расширения → Управление расширениями, перейдите в раздел Установленные и проверьте состояние расширения ZennoDroid VisualStudio Extension. Если его нет в списке, перезапустите ProjectMaker и подключитесь к Visual Studio ещё раз. Если проблема сохранится, обратитесь в техническую поддержку.
Структура проекта.
Чтобы проект можно было использовать в экшене, он должен:
- содержать ссылки на библиотеки ZennoDroid:
Global.dll,ZennoLab.CommandCenter.dll,ZennoLab.Emulation.dll,ZennoLab.InterfacesLibrary.dll,ZennoLab.Macros.dllиZennoDroid.Interface.dll. Они находятся в папке установленного ZennoDroid — путь к ней шаблон берёт из переменной окруженияZennoDroidDllPath, которая выставляется при запуске ProjectMaker или ZennoDroid; - содержать класс, реализующий интерфейс
IZennoExternalCode. При выполнении кубика будет вызван методpublic int Execute(Instance instance, IZennoPosterProjectModel project), который должен вернуть0при успехе и любое другое значение при ошибке.
Проект, созданный из ProjectMaker, уже соответствует этим требованиям. Он содержит один файл Program.cs с готовой реализацией метода Execute:
public class Program : IZennoExternalCode
{
public int Execute(Instance instance, IZennoPosterProjectModel project)
{
// API устройства ZennoDroid
IDroidInstanceAPI droid = instance.DroidInstance;
int executionResult = 0;
return executionResult;
}
}
Объекты instance и project работают так же, как в кубике C# код: через instance.DroidInstance доступен API устройства, а через project — переменные и настройки проекта.
Для отладки кода воспользуйтесь стандартной кнопкой Пуск в Visual Studio.
Записывайте проект в ProjectMaker как обычно, а в Visual Studio пишите код руками.
Использование dll.
Поэтому этот режим удобен для перено са готового проекта между компьютерами. Нужно только обеспечить доступность требуемых dll на каждом из них — например, скопировать их в папку проекта.
После завершения разработки в Visual Studio можно быстро перейти к прямому использованию выходной dll — для этого нажмите кнопку Использовать как dll. Откроется окно, в котором выбираются нужные действия.

- Сборка решения (обязательный шаг).
- Объединение выходной dll и библиотек в один файл с помощью ILRepack. Позволяет уменьшить количество файлов, которые нужно переносить с проектом.
- Копирование dll по указанному пути. По умолчанию используется макрос папки проекта.
- Переключение кубика в режим Использовать как dll с установкой пути к dll.
- Показ собранной dll в Проводнике.
Тогда путь к dll указывается в свойствах кубика. Чтобы dll могла быть выполнена, в ней должен быть класс, реализующий интерфейс IZennoExternalCode.
Возможные ошибки и способы их устранения.
Project Target Framework Not Installed.

Не установлен набор разработчика для .NET Framework 4.6.2. Его нужно скачать с официального сайта и установить: Download .NET SDKs for Visual Studio.
Call was rejected by callee (RPC_E_CALL_REJECTED).

Visual Studio отклоняет запросы на взаимодействие со стороны ProjectMaker. Чаще всего это происходит, когда в Visual Studio нужно совершить какие-либо действия — например, появилось диалоговое окно. Переключитесь в Visual Studio, выполните необходимые действия, а затем подключитесь к ней ещё раз. Если ошибка сохранилась, перезапустите Visual Studio, а если и это не помогло — обратитесь в техническую поддержку.