Aracılığıyla paylaş


NuGet için x betik Varlığı Önbelleğe Alma kaynağı oluşturma

Dekont

Bu bölüm, vcpkg'nin herhangi bir zamanda değişebilen veya kaldırılabilen deneysel bir özelliğini kapsar.

Bu örnekte, yapıtları geri yüklemek ve göndermek için betik kullanarak bir NuGet akışını varlık önbelleğe alma kaynağı olarak ayarlayacağız.

Önkoşullar

  • nuget.exe
  • NuGet paketleri akışı

1. Adım: Oluşturma asset-source.nuspec

Aşağıdaki içeriklere sahip bir NuGet paket belirtimi şablonu oluşturun:

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

2. Adım: Varlık sağlayıcısı betiği oluşturma

Şimdi varsa NuGet akışından paketleri indiren ve yoksa eksik paketleri akışınıza yükleyen bir betik oluşturmanız gerekir.

Aşağıda sağlanan içeriklerle oluşturun asset-provider.bat , NuGet akışı URL'sini ve yolunu asset-source.nuspec sisteminizdeki doğru değerlerle değiştirdiğinden emin olun.

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

3. Adım: Varlık önbelleğe alma kaynaklarını yapılandırma

Varlık sağlayıcısı betiğini oluşturduğunuza göre, vcpkg'ye bunu varlık önbelleğe alma kaynağı olarak kullanma talimatı vermeniz gerekir. Bunu yapmak için aşağıdaki ortam değişkenlerini ayarlayın:

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

NOT: Varlık sağlayıcısı betiğinin ve nuget.exe dosyasının yer tutucu yollarını sisteminizdeki doğru yollarla değiştirdiğinden emin olun.

X_VCPKG_ASSET_SOURCES , vcpkg için varlık önbelleğe alma kaynaklarını ayarlamak için kullanılan ortam değişkenidir. Bu örnekte aşağıdaki değerleri ayarlayacağız:

  • clear varsayılan varlık önbelleğe alma konumundan kurtulur.
  • x-script betiğinizi varlık önbelleğe alma kaynağı olarak ekler, ilk parametre vcpkg komut satırının çağrılması gerektiğini belirtir, bu örnekte betiği çağırır asset-provider.bat ve gerekli bazı parametreleri iletiriz.
  • x-block-origin tüm indirmeleri yapılandırılan varlık önbelleğe alma kaynaklarından gelmeye zorlar.

VCPKG_KEEP_ENV_VARS ortam değişkenlerini vcpkg'nin derleme ortamına iletmek için kullanılır. Derlemeler sırasında vcpkg temiz bir ortam oluşturur ve öğesini VCPKG_KEEP_ENV_VARS ekleyerek NUGET NuGet yürütülebilir konumunun derlemeler sırasında iletilmesini sağlarız.

Her şey düzgün bir şekilde ayarlandıktan sonra, vcpkg bir varlığı indirdiği her zaman gelecekteki indirmelerde kullanmak üzere NuGet akışınıza yükler. Önbelleğe alınan varlıkların, dosyasındaki SHA512 ve içinde asset-source.nuspecbelirtilen sürümden sonra adlandırıldığını göreceksiniz. Paketleriniz için daha kötü adlara sahip olmak isterseniz, paket şablonunu ve varlık sağlayıcısı betiğini kendi mantığınızla değiştirebilirsiniz.