[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M699KEABANC3SY3NJNVCJMHB":3,"skill-same:01M699KEABANC3SY3NJNVCJMHB":68},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M699KEABANC3SY3NJNVCJMHB","winapp-signing",null,"Sign an existing .msix or .exe and manage code-signing certificates: winapp sign, cert generate\u002Finstall\u002Finfo, Azure Trusted Signing. Use when signing with a .pfx, creating or trusting a dev certificate, verifying a signature, or fixing a publisher mismatch. Not for building the MSIX.","microsoft\u002FwinappCli","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M699J7Q2FM9V32CFV0Q8VPF9",1377,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinapp\u002Fskills\u002Fwinapp-signing\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"winapp signing","signing","when","msix","Existing","for","with","cert","publisher","sign","info","manage","use","install","certificate","certificates","code-signing","dev","code","generate","azure","2026-11-10 10:12:30",false,"---\nname: winapp-signing\ndescription: \"Sign an existing .msix or .exe and manage code-signing certificates: winapp sign, cert generate\u002Finstall\u002Finfo, Azure Trusted Signing. Use when signing with a .pfx, creating or trusting a dev certificate, verifying a signature, or fixing a publisher mismatch. Not for building the MSIX.\"\n---\n\n**If you can't run `winapp` yourself** (no shell, or the command is denied), give the user the exact `winapp` command(s) for their project instead of only describing the steps.\n\n## When to use\n\nUse this skill when:\n- **Generating a development certificate** for local MSIX signing and testing\n- **Installing (trusting) a certificate** on a machine so MSIX packages can be installed\n- **Signing an MSIX package or executable** for distribution\n- **Signing with Azure Trusted Signing** (cloud-managed signing identity) via `winapp az-sign`\n\n## Prerequisites\n\n- winapp CLI installed\n- **Administrator access** required for `cert install` (trusting certificates on the machine)\n\n## Key concepts\n\n**Publisher matching:** The publisher in your certificate must exactly match the `Publisher` attribute in `Package.appxmanifest`. Most X.500 distinguished names are supported (e.g., `CN=MyCompany` or `OU=Team, O=Corp, C=US`), but components must be single-valued and comma-separated — multi-valued RDNs (`CN=Foo+OU=Bar`) and backslashes aren't supported because the MSIX manifest publisher cannot represent them. Use `--manifest` when generating to auto-match.\n\n**Dev vs. production certs:** `winapp cert generate` creates self-signed certificates for **local testing only**. For production distribution (Microsoft Store or enterprise), obtain a certificate from a trusted Certificate Authority.\n\n**Default password:** Generated certificates use `password` as the default PFX password. Override with `--password`. That default is publicly known, so a certificate left with it can be used by anyone who obtains the `.pfx` — keep it to builds that stay on your own machines. With `--json`, check `defaultPasswordIsPublic` (always present when a certificate is generated) and the `warnings` array before handing the certificate to anything else. With `--if-exists skip`, an existing file is left untouched and the JSON is only `{\"certificatePath\": \"...\", \"skipped\": true}`.\n\n## Usage\n\n### Generate a development certificate\n\n```powershell\n# Auto-infer publisher from Package.appxmanifest in the current directory\nwinapp cert generate\n\n# Explicitly point to a manifest\nwinapp cert generate --manifest .\u002Fpath\u002Fto\u002FPackage.appxmanifest\n\n# Set publisher manually (when no manifest exists yet)\nwinapp cert generate --publisher \"CN=Contoso, O=Contoso Ltd, C=US\"\n\n# Custom output path and password\nwinapp cert generate --output .\u002Fcerts\u002Fmyapp.pfx --password MySecurePassword\n\n# Custom validity period\nwinapp cert generate --valid-days 730\n\n# Overwrite existing certificate\nwinapp cert generate --if-exists overwrite\n```\n\nOutput: `devcert.pfx` (or custom path via `--output`).\n\n### Install (trust) a certificate\n\n```powershell\n# Trust the certificate on this machine (requires admin\u002Felevated terminal)\nwinapp cert install .\u002Fdevcert.pfx\n\n# Force reinstall even if already trusted\nwinapp cert install .\u002Fdevcert.pfx --force\n```\n\nThis adds the certificate to the local machine's **Trusted Root Certification Authorities** store. Required before double-clicking MSIX packages or running `Add-AppxPackage`.\n\n### Sign a file\n\n```powershell\n# Sign an MSIX package\nwinapp sign .\u002Fmyapp.msix .\u002Fdevcert.pfx\n\n# Sign with custom password\nwinapp sign .\u002Fmyapp.msix .\u002Fdevcert.pfx --password MySecurePassword\n\n# Sign with timestamp for production (signature remains valid after cert expires)\nwinapp sign .\u002Fmyapp.msix .\u002Fproduction.pfx --timestamp http:\u002F\u002Ftimestamp.digicert.com\n\n# Verify a signature (runs the Windows SDK signtool; the signing certificate must be trusted)\nwinapp tool signtool.exe verify \u002Fpa .\u002Fmyapp.msix\n```\n\n### Bundle signing\n\nWhen packaging multiple architectures into an `.msixbundle`, only the bundle needs to be signed — the signature covers all packages inside. The individual `.msix` slices do not need separate signatures.\n\nNote: The `package` command can sign automatically when you pass `--cert`, so you often don't need `sign` separately.\n\n### Sign with Azure Trusted Signing (cloud signing)\n\nFor production-grade signing without managing a PFX file, use `winapp az-sign` to sign with [Azure Trusted Signing](https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Ftrusted-signing\u002F). The signing identity (certificate) is managed in Azure, so no private key ever lives on the machine.\n\n```powershell\n# Interactive: discover subscription, account, and profile (prompts for any not provided)\nwinapp az-sign .\u002Fapp.msix\n\n# Fully specified — no prompting (ideal for CI\u002FCD)\nwinapp az-sign .\u002Fapp.msix --subscription \u003Csub-id> --resource-group \u003Crg> --account \u003Caccount> --profile \u003Cprofile>\n\n# Reuse an existing metadata.json (skips resource discovery and identity selection; authentication may still be interactive)\nwinapp az-sign .\u002Fapp.msix --metadata-file .\u002Fmetadata.json\n```\n\n**Authentication:** `az-sign` uses Azure's standard credential chain (`DefaultAzureCredential`). In CI\u002FCD, set `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, and `AZURE_CLIENT_SECRET` (or GitHub Actions OIDC \u002F managed identity). An existing Azure CLI session (`az login`, including the `azure\u002Flogin` GitHub Action) is also honored in any environment. Only when no credentials are found *and* the session is interactive will `az-sign` launch `az login` for you.\n\n**Prerequisites:** An Azure Code Signing account and certificate profile (created in the Azure portal after identity validation), plus a role assignment granting your identity the **Code Signing Certificate Profile Signer** role. Signing also requires two machine-wide x64 runtimes that winapp does **not** install for you (it downloads the raw NuGet signing package, not the official client-tools installer): the **x64 .NET 8+ runtime** (the signing library is a managed assembly loaded by `signtool.exe`; winapp's self-contained runtime does not satisfy it) and the **x64 Visual C++ Redistributable** (https:\u002F\u002Faka.ms\u002Fvs\u002F17\u002Frelease\u002Fvc_redist.x64.exe). Also requires **SignTool 10.0.22621.755 or later**. If signing fails while *loading* the dlib (e.g. `0xc000007b` or a missing-DLL error) rather than during authentication, install the missing runtime — most often the VC++ Redistributable.\n\n> **Least-privilege CI:** Auto-discovery (listing subscriptions, resource groups, accounts, and profiles) needs read access at a parent scope. To avoid *every* collection-listing call, pass all four of `--subscription`, `--resource-group`, `--account`, and `--profile`: `az-sign` then validates the account and profile with direct resource reads (a GET on each named resource) instead of enumerating the parent collection, so a principal scoped to just that account and profile is sufficient. Omitting any one of them re-introduces a listing call — for example, leaving out `--subscription` makes `az-sign` list the subscriptions your identity can access — which a narrowly-scoped principal may not be permitted to do. A principal scoped only to a single certificate profile can skip validation entirely by passing a pre-generated `--metadata-file` (which specifies the account endpoint and profile directly).\n\n## Recommended workflow\n\n1. **Generate cert** — `winapp cert generate` (auto-infers publisher from manifest)\n2. **Trust cert** (one-time) — `winapp cert install .\u002Fdevcert.pfx` (run as admin)\n3. **Package + sign** — `winapp package .\u002Fdist --cert .\u002Fdevcert.pfx`\n4. **Distribute** — share the `.msix`; recipients must also trust the cert, or use a trusted CA cert\n\n## Tips\n\n- Always use `--manifest` (or have `Package.appxmanifest` in the working directory) when generating certs to ensure the publisher matches automatically\n- For CI\u002FCD, store the PFX as a secret and pass the password via `--password` rather than using the default\n- `winapp cert install` modifies the machine certificate store — it persists across reboots and user sessions\n- Use `--timestamp` when signing production builds so the signature survives certificate expiration\n- You can also use the shorthand: `winapp package .\u002Fdist --generate-cert --install-cert` to do everything in one command\n\n## Related skills\n- Need to create a manifest first? See `winapp-manifest` to generate `Package.appxmanifest` with correct publisher info\n- Ready to package? See `winapp-package` to create and sign an MSIX in one step\n- Having issues? See `winapp-troubleshoot` for common error solutions\n\n## Troubleshooting\n| Error | Cause | Solution |\n|-------|-------|----------|\n| \"Publisher mismatch\" | Cert publisher ≠ manifest publisher | `winapp cert generate --manifest .\u002FPackage.appxmanifest` to re-generate with correct publisher |\n| \"Access denied\" \u002F \"elevation required\" | `cert install` needs admin | Run your terminal as Administrator |\n| \"Certificate not trusted\" | Cert not installed on machine | `winapp cert install .\u002Fdevcert.pfx` (admin) |\n| \"Certificate file already exists\" | `devcert.pfx` already present | Use `--if-exists overwrite` or `--if-exists skip` |\n| Signature invalid after time passes | No timestamp used during signing | Re-sign with `--timestamp http:\u002F\u002Ftimestamp.digicert.com` |\n| `az-sign` fails with \"No credentials found\" | No Azure auth in environment | Run `az login`, or set `AZURE_TENANT_ID`\u002F`AZURE_CLIENT_ID`\u002F`AZURE_CLIENT_SECRET` for CI\u002FCD |\n| `az-sign` \"No Trusted Signing accounts found\" | No account in the subscription\u002Fresource group | Create a Trusted Signing account and certificate profile in the Azure portal |\n\n## CLI reference\n\nRun `winapp \u003Ccommand> --help` for current command options, or `winapp --cli-schema` for the complete machine-readable command schema.\n","**If you can't run `winapp` yourself** (no shell, or the command is denied), give the user the exact `winapp` command(s) for their project instead of only describing the steps.\n\n## When to use\n\nUse this skill when:\n- **Generating a development certificate** for local MSIX signing and testing\n- **Installing (trusting) a certificate** on a machine so MSIX packages can be installed\n- **Signing an MSIX package or executable** for distribution\n- **Signing with Azure Trusted Signing** (cloud-managed signing identity) via `winapp az-sign`\n\n## Prerequisites\n\n- winapp CLI installed\n- **Administrator access** required for `cert install` (trusting certificates on the machine)\n\n## Key concepts\n\n**Publisher matching:** The publisher in your certificate must exactly match the `Publisher` attribute in `Package.appxmanifest`. Most X.500 distinguished names are supported (e.g., `CN=MyCompany` or `OU=Team, O=Corp, C=US`), but components must be single-valued and comma-separated — multi-valued RDNs (`CN=Foo+OU=Bar`) and backslashes aren't supported because the MSIX manifest publisher cannot represent them. Use `--manifest` when generating to auto-match.\n\n**Dev vs. production certs:** `winapp cert generate` creates self-signed certificates for **local testing only**. For production distribution (Microsoft Store or enterprise), obtain a certificate from a trusted Certificate Authority.\n\n**Default password:** Generated certificates use `password` as the default PFX password. Override with `--password`. That default is publicly known, so a certificate left with it can be used by anyone who obtains the `.pfx` — keep it to builds that stay on your own machines. With `--json`, check `defaultPasswordIsPublic` (always present when a certificate is generated) and the `warnings` array before handing the certificate to anything else. With `--if-exists skip`, an existing file is left untouched and the JSON is only `{\"certificatePath\": \"...\", \"skipped\": true}`.\n\n## Usage\n\n### Generate a development certificate\n\n```powershell\n# Auto-infer publisher from Package.appxmanifest in the current directory\nwinapp cert generate\n\n# Explicitly point to a manifest\nwinapp cert generate --manifest .\u002Fpath\u002Fto\u002FPackage.appxmanifest\n\n# Set publisher manually (when no manifest exists yet)\nwinapp cert generate --publisher \"CN=Contoso, O=Contoso Ltd, C=US\"\n\n# Custom output path and password\nwinapp cert generate --output .\u002Fcerts\u002Fmyapp.pfx --password MySecurePassword\n\n# Custom validity period\nwinapp cert generate --valid-days 730\n\n# Overwrite existing certificate\nwinapp cert generate --if-exists overwrite\n```\n\nOutput: `devcert.pfx` (or custom path via `--output`).\n\n### Install (trust) a certificate\n\n```powershell\n# Trust the certificate on this machine (requires admin\u002Felevated terminal)\nwinapp cert install .\u002Fdevcert.pfx\n\n# Force reinstall even if already trusted\nwinapp cert install .\u002Fdevcert.pfx --force\n```\n\nThis adds the certificate to the local machine's **Trusted Root Certification Authorities** store. Required before double-clicking MSIX packages or running `Add-AppxPackage`.\n\n### Sign a file\n\n```powershell\n# Sign an MSIX package\nwinapp sign .\u002Fmyapp.msix .\u002Fdevcert.pfx\n\n# Sign with custom password\nwinapp sign .\u002Fmyapp.msix .\u002Fdevcert.pfx --password MySecurePassword\n\n# Sign with timestamp for production (signature remains valid after cert expires)\nwinapp sign .\u002Fmyapp.msix .\u002Fproduction.pfx --timestamp http:\u002F\u002Ftimestamp.digicert.com\n\n# Verify a signature (runs the Windows SDK signtool; the signing certificate must be trusted)\nwinapp tool signtool.exe verify \u002Fpa .\u002Fmyapp.msix\n```\n\n### Bundle signing\n\nWhen packaging multiple architectures into an `.msixbundle`, only the bundle needs to be signed — the signature covers all packages inside. The individual `.msix` slices do not need separate signatures.\n\nNote: The `package` command can sign automatically when you pass `--cert`, so you often don't need `sign` separately.\n\n### Sign with Azure Trusted Signing (cloud signing)\n\nFor production-grade signing without managing a PFX file, use `winapp az-sign` to sign with [Azure Trusted Signing](https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Ftrusted-signing\u002F). The signing identity (certificate) is managed in Azure, so no private key ever lives on the machine.\n\n```powershell\n# Interactive: discover subscription, account, and profile (prompts for any not provided)\nwinapp az-sign .\u002Fapp.msix\n\n# Fully specified — no prompting (ideal for CI\u002FCD)\nwinapp az-sign .\u002Fapp.msix --subscription \u003Csub-id> --resource-group \u003Crg> --account \u003Caccount> --profile \u003Cprofile>\n\n# Reuse an existing metadata.json (skips resource discovery and identity selection; authentication may still be interactive)\nwinapp az-sign .\u002Fapp.msix --metadata-file .\u002Fmetadata.json\n```\n\n**Authentication:** `az-sign` uses Azure's standard credential chain (`DefaultAzureCredential`). In CI\u002FCD, set `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, and `AZURE_CLIENT_SECRET` (or GitHub Actions OIDC \u002F managed identity). An existing Azure CLI session (`az login`, including the `azure\u002Flogin` GitHub Action) is also honored in any environment. Only when no credentials are found *and* the session is interactive will `az-sign` launch `az login` for you.\n\n**Prerequisites:** An Azure Code Signing account and certificate profile (created in the Azure portal after identity validation), plus a role assignment granting your identity the **Code Signing Certificate Profile Signer** role. Signing also requires two machine-wide x64 runtimes that winapp does **not** install for you (it downloads the raw NuGet signing package, not the official client-tools installer): the **x64 .NET 8+ runtime** (the signing library is a managed assembly loaded by `signtool.exe`; winapp's self-contained runtime does not satisfy it) and the **x64 Visual C++ Redistributable** (https:\u002F\u002Faka.ms\u002Fvs\u002F17\u002Frelease\u002Fvc_redist.x64.exe). Also requires **SignTool 10.0.22621.755 or later**. If signing fails while *loading* the dlib (e.g. `0xc000007b` or a missing-DLL error) rather than during authentication, install the missing runtime — most often the VC++ Redistributable.\n\n> **Least-privilege CI:** Auto-discovery (listing subscriptions, resource groups, accounts, and profiles) needs read access at a parent scope. To avoid *every* collection-listing call, pass all four of `--subscription`, `--resource-group`, `--account`, and `--profile`: `az-sign` then validates the account and profile with direct resource reads (a GET on each named resource) instead of enumerating the parent collection, so a principal scoped to just that account and profile is sufficient. Omitting any one of them re-introduces a listing call — for example, leaving out `--subscription` makes `az-sign` list the subscriptions your identity can access — which a narrowly-scoped principal may not be permitted to do. A principal scoped only to a single certificate profile can skip validation entirely by passing a pre-generated `--metadata-file` (which specifies the account endpoint and profile directly).\n\n## Recommended workflow\n\n1. **Generate cert** — `winapp cert generate` (auto-infers publisher from manifest)\n2. **Trust cert** (one-time) — `winapp cert install .\u002Fdevcert.pfx` (run as admin)\n3. **Package + sign** — `winapp package .\u002Fdist --cert .\u002Fdevcert.pfx`\n4. **Distribute** — share the `.msix`; recipients must also trust the cert, or use a trusted CA cert\n\n## Tips\n\n- Always use `--manifest` (or have `Package.appxmanifest` in the working directory) when generating certs to ensure the publisher matches automatically\n- For CI\u002FCD, store the PFX as a secret and pass the password via `--password` rather than using the default\n- `winapp cert install` modifies the machine certificate store — it persists across reboots and user sessions\n- Use `--timestamp` when signing production builds so the signature survives certificate expiration\n- You can also use the shorthand: `winapp package .\u002Fdist --generate-cert --install-cert` to do everything in one command\n\n## Related skills\n- Need to create a manifest first? See `winapp-manifest` to generate `Package.appxmanifest` with correct publisher info\n- Ready to package? See `winapp-package` to create and sign an MSIX in one step\n- Having issues? See `winapp-troubleshoot` for common error solutions\n\n## Troubleshooting\n| Error | Cause | Solution |\n|-------|-------|----------|\n| \"Publisher mismatch\" | Cert publisher ≠ manifest publisher | `winapp cert generate --manifest .\u002FPackage.appxmanifest` to re-generate with correct publisher |\n| \"Access denied\" \u002F \"elevation required\" | `cert install` needs admin | Run your terminal as Administrator |\n| \"Certificate not trusted\" | Cert not installed on machine | `winapp cert install .\u002Fdevcert.pfx` (admin) |\n| \"Certificate file already exists\" | `devcert.pfx` already present | Use `--if-exists overwrite` or `--if-exists skip` |\n| Signature invalid after time passes | No timestamp used during signing | Re-sign with `--timestamp http:\u002F\u002Ftimestamp.digicert.com` |\n| `az-sign` fails with \"No credentials found\" | No Azure auth in environment | Run `az login`, or set `AZURE_TENANT_ID`\u002F`AZURE_CLIENT_ID`\u002F`AZURE_CLIENT_SECRET` for CI\u002FCD |\n| `az-sign` \"No Trusted Signing accounts found\" | No account in the subscription\u002Fresource group | Create a Trusted Signing account and certificate profile in the Azure portal |\n\n## CLI reference\n\nRun `winapp \u003Ccommand> --help` for current command options, or `winapp --cli-schema` for the complete machine-readable command schema.\n",{"name":5,"description":7},"main","1fe910277860e8dbb38bfbeef7e8bdb039d6ee41","plugins\u002Fwinapp\u002Fskills\u002Fwinapp-signing",95,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-11 08:15:51",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add microsoft\u002FwinappCli --skill winapp-signing",{"tool":60,"command":61},"bunx","bunx skills add microsoft\u002FwinappCli --skill winapp-signing",{"tool":63,"command":64},"pnpm","pnpm dlx skills add microsoft\u002FwinappCli --skill winapp-signing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinapp\u002Fskills\u002Fwinapp-signing\u002FSKILL.md",true,[],[69,93,126,150,169,183],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":40},"01M699M75MK9AADQV8PQQQ6NEV","winui-wpf-migration","Migrate or port a WPF app to WinUI 3: namespaces (System.Windows to Microsoft.UI.Xaml), control mapping (DataGrid, WrapPanel, TabControl), Dispatcher to DispatcherQueue, imaging, MVVM with CommunityToolkit.Mvvm, ThemeResource. Use when converting WPF code or fixing migration build errors.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-wpf-migration\u002FSKILL.md",[],[76,77,78,79,9,80,81,37,82,83,84,85,31,86,87,88,89,90,91,92,21],"winui wpf migration","winui","wpf","migration","windows","dispatcher","xaml","ui","migrate","system","mvvm","app","mapping","port","imaging","errors","namespaces",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":109,"publishedAt":40},"01M699M4W3GKSVVT9CRR1E3KSW","winui-ui-testing","Write and run automated UI tests for Windows desktop apps (WinUI 3, WPF, WinForms, Win32) with the winapp ui harness: one batch script, assertions, input, file pickers, dialogs, screenshots, locally or in Windows Sandbox. Use when asked for UI tests or to verify a feature end to end.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-ui-testing\u002FSKILL.md",[99,104],{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[110,111,77,83,112,113,114,80,115,116,117,118,119,120,121,122,123,124,125,24,21],"testing","winui ui testing","ui testing","screenshots","sandbox","run","win32","harness","batch","write","feature","end","apps","input","winforms","desktop apps",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":135,"publishedAt":40},"01M699M2KTEYJZBDW7JBHM94K0","winui-setup","Install and verify WinUI 3 prerequisites — .NET SDK 8.0.100+, WinApp CLI 0.7+, and Developer Mode; identify additional Native AOT and Windows Sandbox requirements. Use when the user asks to set up or repair the toolchain, or when another WinUI skill finds a missing or outdated prerequisite.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-setup\u002FSKILL.md",[132],{"categoryNo":133,"categoryName":134,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000030","开发工程师",[136,137,77,138,114,139,80,140,141,32,31,142,143,144,145,146,147,148,149,21],"winui setup","setup","cli","sdk","SET","verify","up","repair","requirements","missing","native","toolchain","winapp cli","mode",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":159,"publishedAt":40},"01M699KZWEZ84A4J3291E6R65B","winui-packaging","MSIX packaging, signing, and Microsoft Store publishing for WinUI 3 apps with WinApp CLI 0.7+: project packaging, Native AOT, certificates, self-contained deployment, CI\u002FCD. Use when releasing or publishing a WinUI app. Not for WPF, WinForms, or Electron apps that only reference the Windows App SDK.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-packaging\u002FSKILL.md",[156],{"categoryNo":157,"categoryName":158,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000011","运维与部署",[160,77,161,138,139,162,9,22,80,163,164,34,165,166,167,87,122,124,146,168,148,24,21],"winui packaging","packaging","electron","windows app sdk","ci","only","self","project","CI\u002FCD",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":40},"01M699KXTHG9FHK4X3JSZ4SV8J","winui-dev-workflow","Create, build, run, and fix build errors in WinUI 3 apps (C# or C++) with WinApp CLI 0.7+: winapp new, winapp run, Native AOT, crash diagnosis. Use for a new WinUI app or a WinUI project that fails to build or crashes. Not for WPF, WinForms, or Electron apps that only reference the Windows App SDK.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-dev-workflow\u002FSKILL.md",[],[176,177,77,36,178,138,139,162,80,179,115,180,165,167,87,181,122,124,146,148,91,182],"workflow","winui dev workflow","dev workflow","create","fix","diagnosis","new",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":199,"publishedAt":40},"01M699KV0Q6NE5EET5EDBH33NM","winui-design","Read before writing or changing WinUI 3 XAML: choosing controls, pages and navigation, layout, Fluent Design, theming, accessibility, x:Bind, real samples, and checking that APIs exist with winapp find-api. Not for WPF or WinForms UI, even if the app uses the Windows App SDK.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-design\u002FSKILL.md",[189,192,195,196],{"categoryNo":190,"categoryName":191,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":193,"categoryName":194,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},{"categoryNo":197,"categoryName":198,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000036","内容创作者",[200,201,77,202,139,203,204,80,163,78,82,83,205,206,207,208,209,87,124,210,24,211],"design","winui design","writing","accessibility","fluent","api","read","layout","pages","bind","controls","fluent design"]