İ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--debug
ayarlayı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.json
akışı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ı.
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.
Neden 2: Uzak ikili önbellek boş
Uzak önbellek, gönderdiğiniz ikili paketlerin listesini içermelidir.
- Boş ikili önbellek bölümüne bakın.
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/vcpkg
bootstrap
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/vcpkg
bootstrap
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.
- Otomatik derleyici güncelleştirmelerini devre dışı bırakın.
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.
- Şu anda görüntünüzü düzeltmenin ve araçların ve derleyici sürümünün düzenli aralıklarla güncelleştirilmesini engellemenin bir yolu yoktur. Alternatif çözümler için diğer seçenekler bölümüne bakın.
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ündekivcpkgTools.xml
sü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ündekivcpkgTools.xml
sü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ündekivcpkgTools.xml
sü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ündekivcpkgTools.xml
sü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.