К основному содержанию
правило официальный · GitHub

pcf-manifest-schema — правило для GitHub Copilot: справочник

Правило подсказывает Copilot структуру ControlManifest.Input.xml: какие элементы и атрибуты бывают и что они делают. Пригодится, когда правишь манифест PCF-компонента.

Установить в GitHub Copilot · Вручную: положить файлы Все способы и платформы ↓
.github/instructions/pcf-manifest-schema.instructions.md
Открыть на GitHub

Что делает pcf-manifest-schema

Правило включается на файлы **/*.xml. Внутри — разбор манифеста по частям: корневой manifest, элементы code и control, свойства property и type-group, наборы данных data-set, ресурсы resources с вложенными css, img и resx, объявления фич uses-feature, зависимости, platform-library для React и Fluent UI, события и platform-action. У каждого элемента перечислены атрибуты и платформы, где он доступен.

В конце лежит пример полного манифеста: контроль с версией и ключами локализации, свойство с of-type, группа типов с Whole.None и Currency, набор данных, событие, ресурсы и объявления фич вроде WebAPI и Device.captureImage. Есть раздел про валидацию: схема проверяется при сборке, пропущенный обязательный элемент ломает билд, а структуру можно проверить командами pac pcf.

Советует всегда брать ключи ресурсов вместо строк прямо в манифесте и объявлять все используемые фичи. Учтите: правило привязано к XML, так что в файлах реализации на TypeScript оно не сработает — там Copilot подсказок по манифесту не даст.

Какие задачи решает

  • вспомнить, какие атрибуты есть у элемента property
  • описать свойство, принимающее несколько типов через type-group
  • подключить React и Fluent UI как platform-library
  • объявить используемые фичи устройства в feature-usage
  • проверить манифест перед сборкой и не получить ошибку

Примеры запросов агенту

  • добавь в ControlManifest.Input.xml свойство, которое принимает Whole.None и Currency
  • объясни, зачем в манифесте нужен тег resx и как он связан с display-name-key
  • проверь мой манифест: все обязательные элементы на месте?

Как установить pcf-manifest-schema

Вручную: положить файлы

.github/instructions/pcf-manifest-schema.instructions.md

Поле applyTo задаёт, к каким файлам применять

По шагам, с командами для каждой платформы: AGENTS.md и CLAUDE.md: что это, кто читает и какой выбрать

Из того же набора732

Весь набор →
power-bi-custom-visuals-development Правило для GitHub Copilot, которое подсказывает агенту, как писать кастомные визуалы Power BI на React, D3.js и TypeScript. ★ 40 418звёзд репо playwright-typescript Правило задаёт Copilot стиль написания тестов Playwright: ролевые локаторы, автоожидание, единая структура файлов. Пригодится, если тесты пишет агент, а не человек. ★ 40 418звёзд репо php-symfony Правило задаёт Copilot стиль разработки на Symfony: структура проекта, DI, Doctrine, Twig и тесты. Пригодится, если не хочется объяснять агенту конвенции в каждом чате. ★ 40 418звёзд репо pcf-tooling Правило подсказывает Copilot, что для сборки, отладки и деплоя код-компонентов нужен Microsoft Power Platform CLI. ★ 40 418звёзд репо pcf-events Правило подсказывает Copilot, как объявлять и обрабатывать кастомные события в компонентах Power Apps Component Framework. ★ 40 418звёзд репо pcf-code-components Правило объясняет Copilot, как устроены code components в Power Apps component framework: манифест, реализация, ресурсы. Пригодится, когда правите ControlManifest.Input.xml или index.ts. ★ 40 418звёзд репо oop-design-patterns Правило для GitHub Copilot, которое подталкивает его к паттернам GoF и принципам SOLID при генерации и рефакторинге ООП-кода. ★ 40 418звёзд репо no-heredoc Правило запрещает агенту писать файлы через heredoc и перенаправления в терминале, потому что в VS Code такие команды портят содержимое. ★ 40 418звёзд репо

Похожие

manifest-yaml-cursorrules-prompt-file PatrickJS Правило задаёт Cursor, как собирать лёгкий демо-бэкенд на Manifest: структура проекта, файл manifest/backend.yml и ограничения по сущностям. ★ 41 011звёзд репо wiki-status Ar9av Скилл показывает состояние вики в Obsidian-волте: что уже втянуто, что появилось с прошлого прогона и какие страницы устарели. Полезен перед выбором — дописывать базу или пересобирать её с нуля. CX Codex +1 3 400установок pwa-development alinaqi Скилл для сборки Progressive Web App: манифест, service worker, стратегии кэширования и офлайн-режим. Пригодится, когда приложение должно ставиться на телефон и открываться без сети. CX Codex +1 4 100установок pwa-expert curiositech Помогает сделать веб-приложение устанавливаемым и работающим офлайн: манифест, Service Worker, стратегии кеширования, свой экран установки. CX Codex +1 544установок schema coreyhaines31 Скилл помогает добавлять и исправлять структурированные данные на страницах сайта. Пригодится, если нужно подготовить JSON-LD и проверить, поддерживает ли Google нужный вид расширенного результата. CX Codex +1 78 300установок k8s-manifest-generator Seth Hobson Скилл создаёт Kubernetes-манифесты для приложений и конфигурации. Пригодится, когда нужны Deployment, Service, ConfigMap, Secret или PersistentVolumeClaim. CX Codex 11 166установок

Рядом в теме «Фронтенд и UI»

Все правила IDE по теме «Фронтенд и UI» →

Вопросы о pcf-manifest-schema

Как установить pcf-manifest-schema в GitHub Copilot?

Положите файл .github/instructions/pcf-manifest-schema.instructions.md в репозиторий по этому пути.

Что делает pcf-manifest-schema?

Даёт Copilot справочник по элементам и атрибутам ControlManifest.Input.xml для PCF-компонентов, чтобы подсказки по манифесту были точнее.

На какие файлы действует правило?

Только на XML: в поле applyTo стоит **/*.xml. В файлах реализации на TypeScript оно не применяется.

Исходный текст

pcf-manifest-schema.instructions.md · MIT
---
description: 'Complete manifest schema reference for PCF components with all available XML elements'
applyTo: '**/*.xml'
---

# Manifest Schema Reference

The manifest file (`ControlManifest.Input.xml`) is a metadata document that defines your code component. This reference lists all available manifest elements and their purposes.

## Root Element

### manifest

The root element that contains the entire component definition.

## Core Elements

### code

Refers to the resource file that implements the component logic.

**Attributes:**
- `path`: Path to the TypeScript/JavaScript implementation file
- `order`: Loading order (typically "1")

**Availability:** Model-driven apps, canvas apps, portals

### control

Defines the component itself, including namespace, version, and display information.

**Key Attributes:**
- `namespace`: Namespace for the component
- `constructor`: Constructor name
- `version`: Semantic version (e.g., "1.0.0")
- `display-name-key`: Resource key for display name
- `description-key`: Resource key for description
- `control-type`: Type of control ("standard" or "virtual")

**Availability:** Model-driven apps, canvas apps, portals

## Property Elements

### property

Defines an input or output property for the component.

**Key Attributes:**
- `name`: Property name
- `display-name-key`: Resource key for display name
- `description-key`: Resource key for description
- `of-type`: Data type (e.g., "SingleLine.Text", "Whole.None", "TwoOptions", "DateAndTime.DateOnly")
- `usage`: Property usage ("bound" or "input")
- `required`: Whether property is required (true/false)
- `of-type-group`: Reference to a type-group
- `default-value`: Default value for the property

**Availability:** Model-driven apps, canvas apps, portals

### type-group

Defines a group of types that a property can accept.

**Usage:** Allows a property to accept multiple data types

**Availability:** Model-driven apps, canvas apps, portals

## Data Set Elements

### data-set

Defines a dataset property for working with tabular data.

**Key Attributes:**
- `name`: Dataset name
- `display-name-key`: Resource key for display name
- `description-key`: Resource key for description

**Availability:** Model-driven apps (canvas apps with limitations)

## Resource Elements

### resources

Container for all resource definitions (code, CSS, images, localization).

**Availability:** Model-driven apps, canvas apps, portals

### css

References a CSS stylesheet file.

**Attributes:**
- `path`: Path to CSS file
- `order`: Loading order

**Availability:** Model-driven apps, canvas apps, portals

### img

References an image resource.

**Attributes:**
- `path`: Path to image file

**Availability:** Model-driven apps, canvas apps, portals

### resx

References a resource file for localization.

**Attributes:**
- `path`: Path to .resx file
- `version`: Version number

**Availability:** Model-driven apps, canvas apps, portals

## Feature Usage Elements

### uses-feature

Declares that the component uses a specific platform feature.

**Key Attributes:**
- `name`: Feature name (e.g., "Device.captureImage", "Device.getCurrentPosition", "Utility.lookupObjects", "WebAPI")
- `required`: Whether feature is required (true/false)

**Common Features:**
- Device.captureAudio
- Device.captureImage
- Device.captureVideo
- Device.getBarcodeValue
- Device.getCurrentPosition
- Device.pickFile
- Utility.lookupObjects
- WebAPI

**Availability:** Varies by feature and platform

### feature-usage

Container for feature declarations.

**Availability:** Model-driven apps, canvas apps

## Dependency Elements

### dependency

Declares external dependencies required by the component.

**Availability:** Model-driven apps, canvas apps

### external-service-usage

Declares external services that the component uses.

**Key Attributes:**
- `enabled`: Whether external service usage is enabled (true/false)

**Availability:** Model-driven apps, canvas apps

## Library Elements

### platform-library

References a platform-provided library (e.g., React, Fluent UI).

**Key Attributes:**
- `name`: Library name (e.g., "React", "Fluent")
- `version`: Library version

**Availability:** Model-driven apps, canvas apps

## Event Elements

### event

Defines custom events that the component can raise.

**Key Attributes:**
- `name`: Event name
- `display-name-key`: Resource key for display name
- `description-key`: Resource key for description

**Availability:** Model-driven apps, canvas apps

## Action Elements

### platform-action

Defines platform actions that the component can invoke.

**Availability:** Model-driven apps

## Example Manifest Structure

```xml
<?xml version="1.0" encoding="utf-8" ?>
<manifest>
  <control namespace="SampleNamespace" 
           constructor="SampleControl" 
           version="1.0.0" 
           display-name-key="Sample_Display_Key" 
           description-key="Sample_Desc_Key" 
           control-type="standard">
    
    <!-- Properties -->
    <property name="sampleProperty" 
              display-name-key="Property_Display_Key" 
              description-key="Property_Desc_Key" 
              of-type="SingleLine.Text" 
              usage="bound" 
              required="true" />
    
    <!-- Type Group Example -->
    <type-group name="numbers">
      <type>Whole.None</type>
      <type>Currency</type>
      <type>FP</type>
      <type>Decimal</type>
    </type-group>
    
    <property name="numericProperty"
              display-name-key="Numeric_Display_Key"
              of-type-group="numbers"
              usage="bound" />
    
    <!-- Data Set Example -->
    <data-set name="dataSetProperty" 
              display-name-key="Dataset_Display_Key">
    </data-set>
    
    <!-- Events -->
    <event name="onCustomEvent"
           display-name-key="Event_Display_Key"
           description-key="Event_Desc_Key" />
    
    <!-- Resources -->
    <resources>
      <code path="index.ts" order="1" />
      <css path="css/SampleControl.css" order="1" />
      <img path="img/icon.png" />
      <resx path="strings/SampleControl.1033.resx" version="1.0.0" />
    </resources>
    
    <!-- Feature Usage -->
    <feature-usage>
      <uses-feature name="WebAPI" required="true" />
      <uses-feature name="Device.captureImage" required="false" />
    </feature-usage>
    
    <!-- Platform Library -->
    <platform-library name="React" version="16.8.6" />
    <platform-library name="Fluent" version="8.29.0" />
    
  </control>
</manifest>
```

## Manifest Validation

The manifest schema is validated during the build process:
- Missing required elements will cause build errors
- Invalid attribute values will be flagged
- Use `pac pcf` commands to validate manifest structure

## Best Practices

1. **Semantic Versioning**: Use semantic versioning (major.minor.patch) for component versions
2. **Localization Keys**: Always use resource keys instead of hardcoded strings
3. **Feature Declaration**: Declare all features your component uses
4. **Required vs Optional**: Mark properties and features as required only when truly necessary
5. **Type Groups**: Use type-groups for properties that accept multiple numeric types
6. **Data Types**: Choose the most specific data type that matches your requirements
7. **CSS Scoping**: Scope CSS to avoid conflicts with host applications
8. **Resource Organization**: Keep resources organized in separate folders (css/, img/, strings/)

## Data Type Reference

Common `of-type` values for properties:

- **Text**: SingleLine.Text, Multiple, SingleLine.TextArea, SingleLine.Email, SingleLine.Phone, SingleLine.Url, SingleLine.Ticker
- **Numbers**: Whole.None, Currency, FP, Decimal
- **Date/Time**: DateAndTime.DateAndTime, DateAndTime.DateOnly
- **Boolean**: TwoOptions
- **Lookup**: Lookup.Simple
- **OptionSet**: OptionSet, MultiSelectOptionSet
- **Other**: Enum

## Platform Availability Legend

- ✅ **Model-driven apps**: Fully supported
- ✅ **Canvas apps**: Supported (may have limitations)
- ✅ **Portals**: Supported in Power Pages

Most manifest elements are available across all platforms, but some features (like certain Device APIs or platform actions) may be platform-specific. Always test in your target environment.

© github · MIT · github/awesome-copilot

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой