2025, Sep 18 10:01

msstore publish в CI: как исправить could not find a project publisher

Как исправить ошибку msstore CLI в CI/CD: could not find a project publisher. Просто укажите абсолютный путь к MSIX и параметр -id при публикации в MS Store.

Публикация приложения на Python/Kivy в Microsoft Store из CI может споткнуться о тонкие нюансы. Типичная ситуация: утилита msstore CLI запускается нормально, распознаёт среду CI, но не может связать издателя с каталогом результатов сборки и останавливается с туманным сообщением. Ниже — краткий разбор сбоя и исправления, которое делает пайплайн зелёным.

Пример кода

Изначальный сценарий использует msstore reconfigure, после чего запускается publish, который пытается определить всё по текущему каталогу:

msstore reconfigure --tenantId {TENANT_ID} --clientId {CLIENT_ID} --clientSecret {CLIENT_SECRET} --sellerId {SELLER_ID}
msstore publish -v -i .

CLI запускается, обнаруживает, что работает в CI, и затем завершается со следующим сообщением:

We could not find a project publisher for the project at 'D:\a\app-language\app-language\windows\dist'.

Что на самом деле происходит

Инструмент не может определить издателя проекта, когда его указывают на каталог с результатами сборки. В этом сценарии вывод по каталогу не срабатывает, даже несмотря на то, что сессия CI корректно распознаётся. В итоге — жёсткая остановка прямо перед публикацией.

Решение

Перейдите от вывода по каталогу к явному артефакту. Укажите прямой путь к MSIX, который хотите опубликовать, и передайте идентификатор приложения:

msstore publish "{ABS_MSIX_PATH}" -v -id {STORE_APP_ID}

Так вы заменяете неоднозначную ссылку на каталог конкретным MSIX‑файлом и даёте CLI ровно то, что нужно для отправки пакета.

Почему это важно

В автоматизированных конвейерах неявное обнаружение легко ломается из‑за мелких отличий в раскладке или именовании артефактов. Явная ссылка на MSIX делает процесс детерминированным — именно это нужно для воспроизводимого CI/CD. CLI больше не приходится гадать, что лежит в папке dist: утилита просто берёт указанный пакет и публикует его под переданным id.

Практические выводы

Если msstore CLI пишет, что “could not find a project publisher” для вашего пути в dist, перестаньте полагаться на вывод по каталогу. Используйте абсолютный путь к MSIX и аргумент -id. Команду reconfigure оставьте для учётных данных и привязки продавца, а шагу publish передавайте конкретный пакет. Эта небольшая правка убирает догадки и исключает целый класс ошибок, связанных с путями, в CI.

Коротко: будьте конкретны с артефактом. Направляйте msstore publish на файл MSIX и указывайте id приложения. Этого достаточно, чтобы процесс проходил надёжно.

Статья основана на вопросе с StackOverflow от FieryCat и ответе от FieryCat.