$npx -y skills add Redth/maui-skillz --skill dotnet-workload-infoDiscover .NET SDK versions, workload sets, workload manifest versions, and platform dependencies from live .NET metadata and NuGet feeds. USE FOR: Xcode or JDK requirements, Android SDK packages, MAUI package versions, prerelease workloads, custom NuGet sources, pinned workload s
| 1 | # .NET Workload Info Discovery |
| 2 | |
| 3 | Query live .NET release metadata and NuGet feeds to discover authoritative SDK |
| 4 | versions, workload sets, manifest versions, and dependency requirements. |
| 5 | |
| 6 | Prefer user-provided NuGet sources and exact versions when supplied. This is |
| 7 | important for pre-publication scenarios where the packages are not yet available |
| 8 | on NuGet.org. |
| 9 | |
| 10 | ## When to Use This Skill |
| 11 | |
| 12 | Use this skill when you need to: |
| 13 | - find the latest or requested workload set for a .NET release |
| 14 | - resolve Xcode, JDK, or Android SDK requirements from workload manifests |
| 15 | - inspect prerelease or private-feed workload packages |
| 16 | - honor a specific workload set or workload manifest version provided by the user |
| 17 | - compare implicit MAUI versions with the latest published package versions |
| 18 | |
| 19 | ## Inputs |
| 20 | |
| 21 | | Parameter | Required | Example | Notes | |
| 22 | |-----------|----------|---------|-------| |
| 23 | | dotnetVersion | yes | 9.0, 10.0 | Major.minor format | |
| 24 | | prerelease | no | true/false | Default false | |
| 25 | | workload | no | ios, android, maui | Alias or full id | |
| 26 | | sdkVersion | no | 10.0.103 | Use this instead of latest-sdk discovery when pinned | |
| 27 | | nugetSources | no | `https://pkgs.dev.azure.com/.../index.json`, `myfeed` | Search these sources in the supplied order before NuGet.org | |
| 28 | | nugetConfig | no | `NuGet.config` | Use this to resolve named/custom sources | |
| 29 | | localPackages | no | `/tmp/*.nupkg` | Inspect local packages directly when provided | |
| 30 | | workloadSetVersion | no | 10.103.0 or 10.0.103 | Use the exact requested workload set version | |
| 31 | | manifestVersions | no | `ios=26.2.11425`, `maui=10.0.30` | Per-workload exact version overrides | |
| 32 | |
| 33 | ## Source Handling Rules |
| 34 | |
| 35 | 1. If the user provides `nugetSources`, treat them as authoritative and check |
| 36 | them in the order given. |
| 37 | 2. If the user provides a `NuGet.config`, source name, service-index URL, or |
| 38 | local `.nupkg`, treat that input as authoritative and use it directly. |
| 39 | 3. If a source is a name instead of a URL, resolve it from local NuGet config |
| 40 | or `dotnet nuget list source`. |
| 41 | 4. If an exact `workloadSetVersion` or `manifestVersions` override is supplied, |
| 42 | do not substitute a different version just because a newer one exists. |
| 43 | 5. Reuse the source that provided the workload set when looking up the related |
| 44 | manifest packages, then fall through the remaining sources only if needed. |
| 45 | 6. Stop searching once the requested package/version is found, and report which |
| 46 | source was used. |
| 47 | |
| 48 | ## Workload Aliases |
| 49 | |
| 50 | | Alias | Full ID | |
| 51 | |-------|---------| |
| 52 | | ios | microsoft.net.sdk.ios | |
| 53 | | android | microsoft.net.sdk.android | |
| 54 | | maccatalyst | microsoft.net.sdk.maccatalyst | |
| 55 | | macos | microsoft.net.sdk.macos | |
| 56 | | tvos | microsoft.net.sdk.tvos | |
| 57 | | maui | microsoft.net.sdk.maui | |
| 58 | |
| 59 | --- |
| 60 | |
| 61 | ## Discovery Process |
| 62 | |
| 63 | ### Step 1: Determine SDK Version and Feature Band |
| 64 | |
| 65 | If `sdkVersion` is provided, use it directly. |
| 66 | |
| 67 | If an exact `workloadSetVersion` is provided, preserve that version and derive |
| 68 | the corresponding CLI format and SDK band from it. |
| 69 | |
| 70 | Otherwise, get the latest SDK version from the .NET release metadata: |
| 71 | |
| 72 | ```bash |
| 73 | curl -s "https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/releases-index.json" | \ |
| 74 | jq '.["releases-index"][] | select(.["channel-version"]=="{MAJOR}.0")' |
| 75 | ``` |
| 76 | |
| 77 | Extract `latest-sdk` and derive SDK band: |
| 78 | - `10.0.103` → band `10.0.100` (hundreds digit) |
| 79 | - `10.0.205` → band `10.0.200` |
| 80 | |
| 81 | ### Step 2: Resolve Feed Endpoints |
| 82 | |
| 83 | For each custom source, resolve the NuGet V3 service index and extract the |
| 84 | package base/search endpoints from that source instead of hardcoding |
| 85 | `api.nuget.org` or `azuresearch-usnc.nuget.org`. |
| 86 | |
| 87 | ```bash |
| 88 | curl -s "{SOURCE_INDEX}" | jq -r ' |
| 89 | .resources[] | |
| 90 | select( |
| 91 | (."@type" | tostring | contains("PackageBaseAddress")) or |
| 92 | (."@type" | tostring | contains("SearchQueryService")) |
| 93 | ) | ."@id"' |
| 94 | ``` |
| 95 | |
| 96 | If no custom sources are supplied, use NuGet.org as the fallback/default source. |
| 97 | |
| 98 | ### Step 3: Find Workload Set Package / Version |
| 99 | |
| 100 | Use the dotnet workload search version command to discover the latest workload set version: |
| 101 | |
| 102 | ``` |
| 103 | dotnet workload search version --format json --take 1 |
| 104 | # Returns: [{"workloadVersion":"10.0.103"}] |
| 105 | ``` |
| 106 | |
| 107 | ``` |
| 108 | dotnet workload search version --format json --take 1 | ConvertFrom-Json |
| 109 | ``` |
| 110 | |
| 111 | The returned workloadVersion is the CLI version to use with --version flag. |
| 112 | |
| 113 | **Version conversion**: |
| 114 | To convert this to the NuGet package version used in the |