Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
In diesem Abschnitt wird ein experimentelles Feature von vcpkg behandelt, das jederzeit geändert oder entfernt werden kann.
In diesem Beispiel richten wir einen NuGet-Feed als Objektzwischenspeicherungsquelle ein, indem ein Skript zum Wiederherstellen und Pushen von Artefakten verwendet wird.
Voraussetzungen
- nuget.exe
- Ein NuGet-Paketfeed
Schritt 1: Erstellen asset-source.nuspec
Erstellen Sie eine NuGet-Paketspezifikationsvorlage mit dem folgenden Inhalt:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>$sha$</id>
<version>1.0.0</version>
<description>vcpkg download asset</description>
<authors>vcpkg</authors>
</metadata>
<files>
<file src="$file$" />
</files>
</package>
Schritt 2: Erstellen eines Objektanbieterskripts
Jetzt müssen Sie ein Skript erstellen, das Pakete aus dem NuGet-Feed herunterlädt, falls verfügbar, und lädt fehlende Pakete in Ihren Feed hoch, wenn sie nicht vorhanden sind.
Erstellen Sie asset-provider.bat mit den unten angegebenen Inhalten, stellen Sie sicher, dass Sie die NuGet-Feed-URL und den Pfad durch asset-source.nuspec ihre richtigen Werte in Ihrem System ersetzen.
@echo off
set url=%1
set sha512=%2
set dst=%3
set "_dst=%dst:/=\%"
set "_sha512=%sha512:~0,90%"
cd /d %~dp3
%NUGET% install %sha512:~0,90% -Source https://your-nuget-feed-url
echo.
if exist %_sha512%.1.0.0 (
echo "Pull from the NuGet feed"
cd %_sha512%.1.0.0
REM Assume both are files not directories
echo "F" | xcopy /f *.part %_dst%
) else (
echo "Fetch from the url"
curl.exe -L %url% --create-dirs --output %dst%
REM Replace with the correct path
%NUGET% pack C:\path\to\asset-source.nuspec -BasePath %~dp3 -Properties "sha=%_sha512%;file=%dst%" -OutputDirectory %TEMP%
%NUGET% push -ApiKey az -SkipDuplicate %TEMP%\%_sha512%.1.0.0.nupkg -Source https://your-nuget-feed-url
)
Schritt 3: Konfigurieren der Ressourcenzwischenspeicherungsquellen
Nachdem Sie nun das Objektanbieterskript erstellt haben, müssen Sie vcpkg anweisen, es als Ressourcenzwischenspeicherungsquelle zu verwenden. Legen Sie dazu die folgenden Umgebungsvariablen fest:
$env:X_VCPKG_ASSET_SOURCES="clear;x-script,C:/path/to/asset-provider.bat {url} {sha512} {dst};x-block-origin"
$env:NUGET="C:/path/to/nuget.exe"
$env:VCPKG_KEEP_ENV_VARS="NUGET"
HINWEIS: Ersetzen Sie die Platzhalterpfade zum Objektanbieterskript und nuget.exe durch die richtigen Pfade in Ihrem System.
X_VCPKG_ASSET_SOURCES ist die Umgebungsvariable, die zum Festlegen von Ressourcenzwischenspeicherungsquellen für vcpkg verwendet wird. In diesem Beispiel legen wir die folgenden Werte fest:
clearentfernt den Speicherort für das Zwischenspeichern von Standardobjekten.x-scriptfügt Ihr Skript als Zwischenspeicherungsquelle für Ressourcen hinzu, der erste Parameter gibt an, dass die Befehlszeile vcpkg aufgerufen werden soll. In diesem Beispiel rufen wir dasasset-provider.batSkript auf und leiten einige erforderliche Parameter weiter.x-block-originerzwingt, dass alle Downloads aus den konfigurierten Ressourcenzwischenspeicherungsquellen stammen.
VCPKG_KEEP_ENV_VARS wird verwendet, um Umgebungsvariablen an die Buildumgebung von vcpkg weiterzuleiten. Während der Builds erstellt vcpkg eine sauber Umgebung, indem wir hinzufügen NUGET VCPKG_KEEP_ENV_VARS, dass der ausführbare NuGet-Speicherort während der Builds weitergeleitet wird.
Sobald alles ordnungsgemäß eingerichtet wurde, lädt vcpkg jedes Mal, wenn vcpkg ein Objekt herunterlädt, es in Ihren NuGet-Feed hoch, um es in zukünftigen Downloads zu verwenden. Sie werden feststellen, dass zwischengespeicherte Objekte nach ihrer Datei SHA512 und der in asset-source.nuspecdieser Version angegebenen Version benannt sind. Wenn Sie für Ihre Pakete mehr mittelwertige Namen haben möchten, können Sie das Paketvorlagen- und Objektanbieterskript mit Ihrer eigenen Logik ändern.