Formazione
Percorso di apprendimento
AZ-400: Design and implement a dependency management strategy - Training
AZ-400: Design and implement a dependency management strategy
Questo browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
vcpkg determina il Registro di sistema responsabile (o sovrimpressione) per ogni pacchetto prima di raggiungere la rete. In questo modo si evitano gli attacchi di confusione sulle dipendenze del pacchetto perché la risoluzione dei nomi non dipende da alcuno stato esterno.
I passaggi dell'algoritmo di risoluzione dei nomi sono:
"packages"
pattern che corrisponde al nome della porta, usare tale registro; altrimentinull
è , usare tale registro; in caso contrario,Quando sono presenti più "packages"
modelli che corrispondono al nome, vcpkg assegna la priorità come indicato di seguito:
boost
esatta boost*
boost*
più lungo b*
vcpkg-configuration.json
{
"registries": [
{
"kind": "git",
"repository": "https://github.com/microsoft/vcpkg-docs",
"reference": "vcpkg-registry",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"packages": ["bei*"]
},
{
"kind": "git",
"repository": "https://github.com/vicroms/vcpkg-registry",
"baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
"packages": ["beicode", "bei*"]
}
]
}
vcpkg.json
{
"dependencies": [
"beicode",
"beison",
"fmt"
],
"builtin-baseline": "7e7c62d863b1bf599c1d104b76cd8b74475844d4"
}
Data questa configurazione, ogni nome del pacchetto viene risolto in:
beicode
: dal Registro di sistema https://github.com/vicroms/vcpkg-registry
(corrispondenza esatta in beicode
)beison
: from registry https://github.com/Microsoft/vcpkg-docs
(pattern match on beison
and declared first in "registries"
array)fmt
: dal Registro di sistema predefinito (nessuna corrispondenza)Poiché più registri dichiarano bei*
, vcpkg genererà anche un avviso:
Found the following problems in configuration (path/to/vcpkg-configuration.json):
$ (a configuration object): warning: Package "bei*" is duplicated.
First declared in:
location: $.registries[0].packages[0]
registry: https://github.com/microsoft/vcpkg-docs
The following redeclarations will be ignored:
location: $.registries[1].packages[1]
registry: https://github.com/vicroms/vcpkg-registry
È possibile modificare il Registro di sistema predefinito in due modi. Per prima cosa, definendo :"default-registry"
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3"
}
}
In secondo luogo, impostando su "default-registry"
null
e usando il "*"
criterio nella "registries"
matrice:
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3",
"packages": ["*"]
}
]
}
Un vantaggio del secondo modulo è che è possibile aggiungere altre voci alla matrice di pacchetti, mentre l'oggetto "default-registry"
non consente di definire una matrice di pacchetti. Questa differenza diventa importante nei casi in cui è necessario assicurarsi che un pacchetto provenga dal Registro di sistema predefinito.
Si consideri ora un registro che fornisce le librerie Qt Framework.
vcpkg-configuration.json
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "7e7c62d863b1bf599c1d104b76cd8b74475844d4"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/custom-qt/custom-qt-registry",
"baseline": "adfc4de488094a384ca2c202b923ccc097956e0c",
"packages": ["qt*"]
}
]
}
E le dipendenze del progetto seguenti:
vcpkg.json
{
"dependencies": [
"qt5",
"qt-advanced-docking-system",
"qtkeychain"
]
}
Il "qt*"
modello corrisponde a tutti i nomi di porta in vcpkg.json
. Ma c'è un problema! Le porte qt-advanced-docking-system
e qtkeychain
non fanno parte delle librerie ufficiali di Qt Framework e poiché vcpkg non sarà in grado di trovare le porte nel Registro di sistema personalizzato, l'installazione avrà esito negativo.
Questo problema può essere risolto assegnando questi pacchetti al Registro di sistema predefinito.
A tale scopo, modificando il modo in cui dichiariamo il Registro di sistema predefinito e aggiungendo qt-advanced-docking-system
e qtkeychain
alla relativa "packages"
matrice:
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3",
"packages": ["*", "qt-advanced-docking-system", "qtkeychain"]
},
{
"kind": "git",
"repository": "https://github.com/custom-qt/custom-qt-registry",
"baseline": "adfc4de488094a384ca2c202b923ccc097956e0c",
"packages": ["qt*"]
}
]
}
Poiché le corrispondenze esatte sono preferibili rispetto alle corrispondenze qt-advanced-docking-system
dei criteri e qtkeychain
verranno risolte nel Registro di sistema predefinito.
Le porte di sovrapposizione sono un modo per estendere vcpkg con porte aggiuntive senza creare un registro completo. Le sovrimpressioni vengono considerate prima di eventuali ricerche del Registro di sistema o considerazioni sul controllo delle versioni. Le sovrimpressioni sostituiscono tutte le triplette o le porte predefinite. Per altre informazioni, vedere Sovrimpressione delle porte .
Le porte di sovrapposizione vengono valutate in questo ordine:
--overlay-ports
di comando nell'ordine passato;vcpkg-configuration.json
"overlay-ports"
in ordine;VCPKG_OVERLAY_PORTS
variabile di ambiente in ordine.I tripli sovrapposti sono un modo per estendere vcpkg con triplette aggiuntive, senza modificare la directory di installazione di vcpkg. Le sovrimpressioni vengono considerate prima di qualsiasi tripletta incorporata.
I tripli sovrapposti vengono valutati in questo ordine:
vcpkg-configuration.json
in ordine; alloraVCPKG_OVERLAY_TRIPLETS
variabile di ambiente in ordine.Feedback su vcpkg
vcpkg è un progetto di open source. Selezionare un collegamento per fornire feedback:
Formazione
Percorso di apprendimento
AZ-400: Design and implement a dependency management strategy - Training
AZ-400: Design and implement a dependency management strategy