Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Extensions add capabilities to Azure DevOps through contributions and contribution types declared in the extension manifest. A contribution type defines a contract — the properties and behavior that contributions of that type must implement. A contribution is a concrete instance of a contribution type (for example, a hub or a build task).
Tip
If you're starting a new Azure DevOps extension, try these maintained sample collections first—they work with current product builds and cover modern scenarios (for example, adding tabs on pull request pages).
- Azure DevOps extension sample (GitHub)—a compact starter sample that demonstrates common extension patterns: https://github.com/microsoft/azure-devops-extension-sample
- Azure DevOps extension samples (legacy collection and contributions guide)—install to inspect UI targets, or view the source: https://marketplace.visualstudio.com/items/ms-samples.samples-contributions-guide and https://github.com/Microsoft/vso-extension-samples/tree/master/contributions-guide
- Microsoft Learn samples (browse Azure DevOps samples)—curated, up-to-date samples across Microsoft docs: /samples/browse/?terms=azure%20devops%20extension
If a sample doesn't work in your organization, install it into a personal or test organization and compare the extension manifest's target IDs and API versions with the current docs. For reference and APIs, see:
For more information, see:
Contribution types
A contribution type defines the properties and rules that contributions of that type must follow. Contribution types can extend other contribution types, inheriting their properties.
Common built-in contribution types include:
ms.vss-web.hub— a page in the web UIms.vss-web.action— a menu actionms.vss-distributed-task.task— a build/release task
Each property definition in a contribution type specifies:
- type — the data type (for example,
string,boolean,integer) - required — whether the property must be provided
- default — an optional default value
Contribution type example
A contribution type declaration in a manifest looks like this:
{
"contributionTypes": [
{
"id": "hub",
"name": "Web Access Hub",
"description": "A hub that appears in the hubs menu at the top of web pages.",
"properties": {
"name": {
"description": "The text to display for the hub",
"type": "string",
"required": true
},
"uri": {
"description": "URI of the contents of the hub page",
"type": "string",
"required": true
},
"order": {
"description": "Optional ordering value indicating the hub's position within the hub group",
"type": "integer"
}
}
}
]
}
Contributions
A contribution is an instance of a contribution type. For example, the Queries hub under the Work hub group is a contribution of type ms.vss-web.hub, and the Publish Test Results build task is a contribution of type ms.vss-distributed-task.task.
Every contribution must specify a type and provide values for any properties required by that type.
Contribution example
The following hub contribution declaration in an extension manifest adds a hub named "Explorer" to a build hub group:
{
"contributions": [
{
"id": "build-explorer-hub",
"type": "ms.vss-web.hub",
"targets": [
".build-hub-group"
],
"properties": {
"name": "Explorer",
"uri": "/_build",
"order": 22
}
}
]
}
Target contributions
A contribution can target one or more other contributions, creating a parent-child relationship. The system discovers these relationships at runtime to determine what to render. For example, a hub contribution targets a hub-group contribution so the system knows which hubs belong to which group.
{
"id": "build-explorer-hub",
"type": "ms.vss-web.hub",
"targets": [
".build-hub-group"
]
}
When the hub group renders, the system queries for all hub contributions that target it to determine which hubs to display.
Contribution identifiers
Every contribution and contribution type must have a unique ID within its extension.
A fully qualified identifier has three parts separated by dots (.):
| Part | Example |
|---|---|
| Publisher ID | ms |
| Extension ID | vss-web |
| Contribution/type ID | hub |
Full identifier: ms.vss-web.hub
Within the same extension manifest, you can use relative references — a dot followed by the contribution ID. For example, .hub is a shortcut for ms.vss-web.hub when used inside the vss-web extension.