İkili önbelleğe alma sorunlarını giderme kılavuzu

Bu kılavuz, ikili önbelleğe alma ile ilgili sorunlar yaşayan kullanıcılara yöneliktir.

vcpkg hata ayıklama bilgilerini etkinleştirme

Bu kılavuzu takip ederken hata ayıklama çıkışını etkinleştirmeniz kesinlikle önerilir.

  • Klasik mod: komut çağrınıza ekleyin --debug .
  • CMake araç zinciri: CMake yapılandırma çağrınıza veya dosyanıza CMakePresets.json ekleyin-DVCPKG_INSTALL_OPTIONS="--debug".
  • MSBuild/Visual Studio: özelliğini VcpkgAdditionalInstallOptions olarak --debugayarlayın.
  • VCPKG_INSTALL_OPTIONS ortam değişkenini --debug olarak ayarlar.

{url} öğesine NuGet gönderimi başarısız oluyor

Önemli

vcpkg aracınızı en son sürüme güncelleştirin. Ayrıca, kapsamlı hata günlükleri için hata ayıklama çıkışını etkinleştirin.

NuGet ikili kaynağı kullanılırken aşağıdaki hata görüntülenir:

Pushing NuGet to {url} failed. Use --debug for more information.

NuGet yapılandırma dosyası ikili kaynağı kullanılırken aşağıdaki hata görüntülenir:

Pushing NuGet config to {url} failed. Use --debug for more information.

Bu hata, vcpkg bir NuGet akışına paketleri yüklemek için NuGet komut satırını kullanmayı denediğinde ortaya çıkar.

Neden 1: Yetersiz kullanıcı yazma izinleri

Aşağıdaki hata iletisiyle karşılaşırsınız:

System.Net.Http.HttpRequestException: Response status code does not indicate success: 403 (Forbidden - User <user> lacks permission to complete this action. You need to have 'AddPackage'.

Kullanıcı yeterli yazma izinlerine sahip olmadığından gönderme uzak kaynak tarafından reddedildi.

  • Kullanıcı veya kullanıcı grubunuzun yazma izinlerine sahip olduğunu onaylayın. NuGet'te, kullanıcının akışta en az Katkıda Bulunan rolü olması gerekir.

Neden 2: Yanlış yapılandırılmış NuGet Akışı URL'si

Şu hatayı görebilirsiniz:

System.Net.Http.HttpRequestException: Response status code does not indicate success: 405 (Method Not Allowed).

Sunucu, istek yöntemini tanımadığından NuGet'in gönderme isteğini reddetti.

  • İkili kaynağınızdaki URI'nin doğru olduğunu ve genellikle <feed base url>/nuget/v3/index.jsonakışın hizmet dizinine yönlendirdiğini doğrulayın.

Ek NuGet Kaynakları

NuGet akışına bağlanma ve bu akışta yayımlama yönergeleri için NuGet belgelerine bakın.

Önbellek karşıya yükleme hataları

Önemli

vcpkg aracınızı en son sürüme güncelleştirin. Ayrıca, kapsamlı hata günlükleri için hata ayıklama çıkışını etkinleştirin.

önbelleğinize ikili paket yüklerken hatalarla karşılaşırsınız.

Neden 1: İkili önbellek sağlayıcısı karşıya yüklenemedi

Karşıya yüklemeler çeşitli nedenlerle başarısız olabilir ve hata iletileri genellikle sağlayıcıya özgü olur.

  • Önbelleğinizde kimliğinizin doğrulandığından emin olun. Farklı sağlayıcılar farklı kimlik doğrulaması yapar.
  • Önbelleğiniz için doğru URI'yi belirtip belirtmediğinizden denetleyin.
  • NuGet'i ikili kaynak olarak kullanıyorsanız anında iletme sorunlarını giderme bölümüne bakın.
  • Belgeleri veya belirli sağlayıcınızın sorun giderme kılavuzunu gözden geçirin.

Boş ikili önbellek

Önemli

vcpkg aracınızı en son sürüme güncelleştirin. Ayrıca, kapsamlı hata günlükleri için hata ayıklama çıkışını etkinleştirin.

Hiçbir hatayla karşılaşmamış olmanıza ve vcpkg yüklemesi başarılı olmasına rağmen ikili önbellek boş kalır. Hatalar gözlemlediyseniz NuGet için anında iletme sorunlarını giderme ve diğer sağlayıcılar için karşıya yükleme sorunlarını giderme makalelerine bakın.

Neden 1: vcpkg'nin ikili önbellekte yazma izinleri yok

Çıkışınızda aşağıdaki ileti eksik.

Uploading binaries for 'rapidjson:x64-windows' to <binary source> source <url>.
Stored binaries in 1 destinations in 1.5 s.

vcpkg, ikili paketi ikili önbelleğinize yüklemeyi atladı.

  • İkili önbellek yapılandırmanızın veya olarak ayarlandığından write emin olunreadwrite

Kitaplıklar uzak ikili önbellek kullanmak yerine yeniden derlenir

Önemli

vcpkg aracınızı en son sürüme güncelleştirin. Ayrıca, kapsamlı hata günlükleri için hata ayıklama çıkışını etkinleştirin.

Gerekli ikili paket uzak ikili önbellekte kullanılabilse bile sisteminiz kitaplıkları yerel olarak yeniden oluşturur.

Çıkışınızda aşağıdaki ileti eksik.

Restored 1 package(s) from <remote binary cache> in 1.1 s. Use --debug to see more details.

Neden 1: vcpkg'nin uzak ikili önbellekten okuma izinleri yok

vcpkg, uzak önbellek yerine varsayılan ikili önbelleğinizi okumayı seçin.

  • İkili önbellek yapılandırmanızın veya olarak ayarlandığından read emin olunreadwrite

Neden 2: Uzak ikili önbellek boş

Uzak önbellek, gönderdiğiniz ikili paketlerin listesini içermelidir.

Neden 3: Yerel ve uzak derleme ortamları arasındaki farklar

İkili önbellekteki her paket, ikili paketleri ayırt etmek için derleyici sürümlerini, kaynaklarını ve diğer bilgileri içeren bir ABI karması ile etiketlenmiştir. Yerel olarak hesaplanan ABI karması uzaktan depolanan karmayla eşleşmiyorsa paket alınmaz.

Beklenmeyen veya sık kitaplık yeniden derlemeleri

Önemli

vcpkg aracınızı en son sürüme güncelleştirin. Ayrıca, kapsamlı hata günlükleri için hata ayıklama çıkışını etkinleştirin.

Değişmemiş bir ortamda ve vcpkg'yi güncelleştirmeden, yine de kitaplıkları ayrı ayrı yeniden oluştururken buluyorsunuz.

Neden 1: Derleme ortamında algılanmayan değişiklikler

İkili önbellekteki her paket, ikili paketleri ayırt etmek için derleyici sürümlerini, kaynaklarını ve diğer bilgileri içeren bir ABI karması ile etiketlenmiştir. Yerel olarak hesaplanan ABI karması uzaktan depolanan karmayla eşleşmiyorsa paket alınmaz.

ABI karma uyuşmazlığı sorunlarını giderme

Önemli

vcpkg aracınızı en son sürüme güncelleştirin. Ayrıca, kapsamlı hata günlükleri için hata ayıklama çıkışını etkinleştirin.

Bu kılavuz, kullanıcıların aynı adlı iki ikili paket için neden farklı ABI karmalarına sahip olduklarını tanılamalarına yöneliktir.

İki ikili paketi karşılaştırma

Aynı adlı iki paket arasındaki farkı belirlemek için çeşitli verilerin karşılaştırılması gerekir: kaynaklar, araç sürümleri, derleyiciler ve hedef platformlar. ABI karması bu verilerin kısa bir gösterimini sağlar. Bir ABI karması hesaplanırken, vcpkg dosya içeriği, araç sürümleri ve sistem ayrıntıları dahil olmak üzere tüm ilgili verileri dikkate alır. Her veri noktası için bir karma oluşturur ve ardından bu karmaları ikili paket için tek bir değerde birleştirir.

İkili paket ABI karması karşılaştırması

Zlib kitaplığının ABI karması şöyledirbb1c96759ac96102b4b18215db138daedd3eb16c2cd3302ae7bffab2b643eb87:

[DEBUG] Trying to hash <path>\buildtrees\zlib\x86-windows.vcpkg_abi_info.txt
[DEBUG] <path>\buildtrees\zlib\x86-windows.vcpkg_abi_info.txt has hash bb1c96759ac96102b4b18215db138daedd3eb16c2cd3302ae7bffab2b643eb87

Karma aynı kitaplık için çalıştırmalar arasında değişirse, bu iki paketin ayrı olduğunu gösterir.

Derleyici sürümü ABI karması karşılaştırması

Derleyicinizin sürümünün çalıştırmalar arasında değişip değişmediğini doğrulayın.

[DEBUG] -- The C compiler identification is MSVC 19.36.32538.0
[DEBUG] -- The CXX compiler identification is MSVC 19.36.32538.0
[DEBUG] #COMPILER_HASH#f5d02a6542664cfbd4a38db478133cbb1a18f315

Derleyici karması şeklindedir f5d02a6542664cfbd4a38db478133cbb1a18f315.

ABI Karması giriş karşılaştırması

Her paket için ABI girdilerini karşılaştırın. Giriş, son karmaya katkıda bulunan bir bilgi parçasını temsil eder.

[DEBUG] <abientries for zlib:x86-windows>
[DEBUG]   0001-Prevent-invalid-inclusions-when-HAVE_-is-set-to-0.patch|750b9542cb55e6328cca01d3ca997f1373b9530afa95e04213168676936e7bfa
[DEBUG]   0002-skip-building-examples.patch|835ddecfed752e0f49be9b0f8ff7ba76541cb0a150044327316e22ca84f8d0c2
[DEBUG]   0003-build-static-or-shared-not-both.patch|d6026271dcb3d8fc74b41e235620ae31576a798e77aa411c3af8cd9e948c02b1
[DEBUG]   0004-android-and-mingw-fixes.patch|37a43eddbcb1b7dde49e7659ae895dfd0ff1df66666c1371ba7d5bfc49d8b438
[DEBUG]   cmake|3.26.2
[DEBUG]   features|core
[DEBUG]   portfile.cmake|ac63047b644fa758860dd7ba48ff9a13b058c6f240b8e8d675b8fbba035976be
[DEBUG]   ports.cmake|5a8e00cedff0c898b1f90f7d129329d0288801bc9056562b039698caf31ff3f3
[DEBUG]   post_build_checks|2
[DEBUG]   powershell|7.3.6
[DEBUG]   triplet|x86-windows
[DEBUG]   triplet_abi|3e71dd1d4afa622894ae367adbbb1ecbd42c57c51428a86b675fa1c8cad3a581-36b818778ba6f2c16962495caedb9a7b221d5be4c60de1cd3060f549319a9931-f5d02a6542664cfbd4a38db478133cbb1a18f315
[DEBUG]   usage|be22662327df993eebc437495add75acb365ab18d37c7e5de735d4ea4f5d3083
[DEBUG]   vcpkg-cmake|1b3dac4b9b0bcbef227c954b495174863feebe3900b2a6bdef0cd1cf04ca1213
[DEBUG]   vcpkg-cmake-wrapper.cmake|5d49ef2ee6448479c2aad0e5f732e2676eaba0411860f9bebabe6002d66f57d1
[DEBUG]   vcpkg.json|bc94e2540efabe36130a806381a001c57194e7de67454ab7ff1e30aa15e6ce23
[DEBUG]   vcpkg_copy_pdbs|d57e4f196c82dc562a9968c6155073094513c31e2de475694143d3aa47954b1c
[DEBUG]   vcpkg_fixup_pkgconfig|588d833ff057d3ca99c14616c7ecfb5948b5e2a9e4fc02517dceb8b803473457
[DEBUG]   vcpkg_from_git|8f27bff0d01c6d15a3e691758df52bfbb0b1b929da45c4ebba02ef76b54b1881
[DEBUG]   vcpkg_from_github|b743742296a114ea1b18ae99672e02f142c4eb2bef7f57d36c038bedbfb0502f
[DEBUG]   vcpkg_replace_string|d43c8699ce27e25d47367c970d1c546f6bc36b6df8fb0be0c3986eb5830bd4f1
[DEBUG] </abientries>

Not

Girdi üç triplet_abi karma içerir: üçlü dosya içeriğinin x86-windows karması, windows.cmake araç zinciri ve derleyici karması. Farklı bir platformu hedeflemeye karar verirseniz bu karmalar değişir.

Uyuşmazlık 1: Bağlantı noktası dosyaları

Bağlantı noktası dosyaları bağlantı noktası betiklerini (portfile.cmake, vcpkg.json), düzeltme eki dosyalarını (*.patch) veya bağlantı noktaları dizinindeki diğer dosyaları içerir: ports/<library>/*.

Neden 1: CI veya işlem hattı bağlantı noktası kayıt defterini güncelleştirdi

vcpkg CI'nizde çalıştırılana kadar en son vcpkg deposunu kopyaladı.

  • Betiği kullanırken git clone https://github.com/microsoft/vcpkgbootstrap belirli bir işlemeyi kullanıma aldığınızdan emin olun.
  • Projenize git alt modülü olarak vcpkg eklemeyi göz önünde bulundurun.

Neden 2: GitHub Actions vcpkg güncelleştirildi

GitHub Actions tarafından sağlanan ve güncelleştirilen vcpkg'nin sistem kopyasını kullanıyorsunuz.

  • Kendi vcpkg kopyanızı kopyalayın.
  • Projenizde vcpkg'i git alt modülü yapmayı göz önünde bulundurun.

Uyuşmazlık 2: vcpkg CMake yardımcı işlevleri

CMake yardımcı işlevleri betikler dizininde bulunur: scripts/*ve genellikle ile vcpkg_başlar.

Neden 1: CI veya işlem hattı güncelleştirilmiş yardımcı betikler

vcpkg CI'nizde çalıştırılana kadar en son vcpkg deposunu kopyaladı.

  • Betiği kullanırken git clone https://github.com/microsoft/vcpkgbootstrap belirli bir işlemeyi kullanıma aldığınızdan emin olun.
  • Projenize git alt modülü olarak vcpkg eklemeyi göz önünde bulundurun.

Neden 2: GitHub Actions vcpkg güncelleştirildi

GitHub Actions tarafından sağlanan ve güncelleştirilen vcpkg'nin sistem kopyasını kullanıyorsunuz.

  • Kendi vcpkg kopyanızı kopyalayın.
  • Projenizde vcpkg'i git alt modülü yapmayı göz önünde bulundurun.

Uyuşmazlık 3: Derleyici sürümü

vcpkg, bağımlılıklarınızı derleyicinin farklı bir sürümüyle yeniden derledi.

Neden 1: Visual Studio C++ derleyicisi otomatik olarak güncelleştirildi.

Visual Studio, derleyici dahil olmak üzere C++ iş yükünü çalıştırmalar arasında otomatik olarak güncelleştirdi. İkincil sürüm güncelleştirmeleri bile vcpkg'nin kitaplık kümesini yeniden oluşturmasını sağlar.

Neden 2: Kitaplık, onu kullanmak için kullanılan makineden farklı bir makinede oluşturulmuş.

İkili paketi bir makine oluşturup uzak önbellekte yayımladı. Geliştirme için kullanılan başka bir makine genellikle önbelleğe alınmış kitaplığı tüketmiş.

  • Uzak makinenizdeki C++ derleyici sürümünü yerel olarak kullanın. Visual Studio için sabit bir sürüm önyükleyicisi düşünün.
  • Bağımlılıklarınızı geliştirme amacıyla yerel olarak yeniden oluşturun. Daha sonra sürekli tümleştirme sırasında sorunları test edin ve giderin.

Neden 3: Şirket içinde barındırılan görüntü derleyiciyi güncelleştirdi.

vcpkg bağımlılıkları oluşturmak için kullandığınız temel görüntü değiştirildi ve bu da derleyici sürümünü güncelleştirdi.

  • Kararlı ve sürüme sahip bir görüntüye sabitleyin. Çalıştırmalar arasında temel alınan araçları veya derleyicileri otomatik olarak güncelleştirmemesi için en son görüntüyü getirmediğinizden emin olun.
  • Görüntüyü sık sık güncelleştirmeniz gerekiyorsa, görüntünüzü oluştururken C++ derleyici araçlarını belirli bir sürüme sabitleyin.

Neden 4: GitHub Barındırılan Çalıştırıcılar temel derleyiciyi güncelleştirdi.

Barındırılan GitHub çalıştırıcıları derleyicileri ve araçları haftalık olarak güncelleştirir.

Uyuşmazlık 4: Çalıştırmalar arasında araçların sürümü değişti.

CMake veya PowerShell kitaplıklarınızı oluşturmak için kullanılan araçların sürümü çalıştırmalar arasında değiştirildi.

Neden 1: Visual Studio otomatik olarak güncelleştirildi.

Visual Studio, tüm araçlar da dahil olmak üzere çalıştırmalar arasında otomatik olarak güncelleştirilir. İkincil sürüm güncelleştirmeleri bile vcpkg'nin kitaplık kümesini yeniden oluşturmasını sağlar.

  • Otomatik Visual Studio güncelleştirmelerini devre dışı bırakın.
  • vcpkg çağrınıza ekleyin --x-abi-tools-use-exact-versions . Bu, araçlarınızın ABI'sini sürümündeki vcpkgTools.xmlsürümüne göre düzeltir; vcpkg gerekirse kendi kopyasını getirir.

Neden 2: Kitaplık, onu kullanmak için kullanılan makineden farklı bir makinede oluşturulmuş.

İkili paketi bir makine oluşturup uzak önbellekte yayımladı. Geliştirme için kullanılan başka bir makine genellikle önbelleğe alınmış kitaplığı tüketmiş.

  • Uzak makinenizdeki araç sürümlerini yerel olarak kullanın.
  • Bağımlılıklarınızı geliştirme amacıyla yerel olarak yeniden oluşturun. Daha sonra sürekli tümleştirme sırasında sorunları test edin ve giderin.
  • vcpkg çağrınıza ekleyin --x-abi-tools-use-exact-versions . Bu, araçlarınızın ABI'sini sürümündeki vcpkgTools.xmlsürümüne göre düzeltir; vcpkg gerekirse kendi kopyasını getirir.

Neden 3: Şirket içinde barındırılan görüntü araçları güncelleştirdi.

vcpkg bağımlılıkları oluşturmak için kullandığınız temel alınan görüntü, herhangi bir araç sürümünün kullandığı şekilde değiştirildi.

  • Kararlı ve sürüme sahip bir görüntüye sabitleyin. Çalıştırmalar arasındaki temel araçları otomatik olarak güncelleştirmemesi için en son görüntüyü getirmediğinizden emin olun.
  • Resmi sık sık güncelleştirmeniz gerekiyorsa, görüntünüzü oluştururken ilgili araçları belirli bir sürüme sabitleyin.
  • vcpkg çağrınıza ekleyin --x-abi-tools-use-exact-versions . Bu, araçlarınızın ABI'sini sürümündeki vcpkgTools.xmlsürümüne göre düzeltir; vcpkg gerekirse kendi kopyasını getirir.

Neden 4: GitHub Barındırılan Runners temel araçları güncelleştirdi.

Barındırılan GitHub çalıştırıcıları derleyicileri ve araçları haftalık olarak güncelleştirir.

  • vcpkg çağrınıza ekleyin --x-abi-tools-use-exact-versions . Bu, araçlarınızın ABI'sini sürümündeki vcpkgTools.xmlsürümüne göre düzeltir; vcpkg gerekirse kendi kopyasını getirir.

Diğer Seçenekler

Yukarıdaki seçenekler işe yaramazsa aşağıdaki geçici çözümleri göz önünde bulundurun:

  • Bağımlılıklarınızı bir bildirimden geri yüklemek yerine tek başına bir arşiv oluşturmak için kullanın vcpkg export .
  • Kitaplıklarınızı oluşturmak için docker şirket içinde barındırılan bir görüntü kullanmayı göz önünde bulundurun
  • Normal bir tempo üzerinde vcpkg kitaplıkları oluşturan yardımcı bir sürekli tümleştirme çalıştırması (örneğin, günlük veya haftalık)

Sorun burada listelenmiyor

Sorununuz burada listelenmiyorsa, yeni bir sorun oluşturmak için depomuzu ziyaret edin.