Compartir a través de


Creación de un origen de almacenamiento en caché de recursos x-script para NuGet

Nota:

En esta sección se describe una característica experimental de vcpkg que puede cambiar o quitarse en cualquier momento.

En este ejemplo, configuraremos una fuente NuGet como un origen de almacenamiento en caché de recursos mediante un script para restaurar e insertar artefactos.

Requisitos previos

  • nuget.exe
  • Una fuente de paquetes NuGet

Paso 1: Crear asset-source.nuspec

Cree una plantilla de especificación de paquete NuGet con el siguiente contenido:

<?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>

Paso 2: Creación de un script de proveedor de recursos

Ahora debe crear un script que descargue paquetes de la fuente NuGet si está disponible y carga los paquetes que faltan en la fuente si no lo están.

Cree asset-provider.bat con el contenido que se proporciona a continuación, asegúrese de reemplazar la dirección URL de fuente de NuGet y la ruta de acceso a asset-source.nuspec por sus valores correctos en el sistema.

@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
)

Paso 3: Configurar los orígenes de almacenamiento en caché de recursos

Ahora que ha creado el script del proveedor de recursos, debe indicar a vcpkg que lo use como origen de almacenamiento en caché de recursos. Para ello, establezca las siguientes variables de entorno:

$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"

NOTA: Asegúrese de reemplazar las rutas de acceso de marcador de posición al script del proveedor de recursos y nuget.exe por las rutas de acceso correctas del sistema.

X_VCPKG_ASSET_SOURCES es la variable de entorno que se usa para establecer orígenes de almacenamiento en caché de recursos para que vcpkg los use. En este ejemplo se establecen los siguientes valores:

  • clear se deshace de la ubicación predeterminada del almacenamiento en caché de recursos.
  • x-script agrega el script como origen de almacenamiento en caché de recursos, el primer parámetro indica que la línea de comandos vcpkg debe invocar, en este ejemplo llamamos al asset-provider.bat script y reenviamos algunos parámetros necesarios.
  • x-block-origin obliga a que todas las descargas provengan de los orígenes de almacenamiento en caché de recursos configurados.

VCPKG_KEEP_ENV_VARS se usa para reenviar variables de entorno al entorno de compilación de vcpkg. Durante las compilaciones vcpkg se crea un entorno limpio agregando NUGET a VCPKG_KEEP_ENV_VARS , para asegurarnos de que la ubicación ejecutable de NuGet se reenvía durante las compilaciones.

Una vez que todo se haya configurado correctamente, siempre que vcpkg descargue un recurso, lo cargará en la fuente de NuGet para usarlo en futuras descargas. Observará que los recursos almacenados en caché se denominan después de su archivo SHA512 y la versión especificada en asset-source.nuspec. Si quiere tener más nombres medios para los paquetes, puede modificar la plantilla de paquete y el script del proveedor de recursos con su propia lógica.