ASP.NET Core kullanıyorum. HttpClient
Kullanmak istiyorum ancak iki NuGet paketi sunulduğunu fark ettim. Hangisini kullanıyorum?
ASP.NET Core kullanıyorum. HttpClient
Kullanmak istiyorum ancak iki NuGet paketi sunulduğunu fark ettim. Hangisini kullanıyorum?
Yanıtlar:
Sürüme göre değişir. Eski System.Net.Http
paketler ( 2.0 olanlar) Microsoft.Http.Net
, açıklamaya göre lehine kullanımdan kaldırılan eski paketlerdir :
Eski paket System.Net.Http artık 'Microsoft.Net.Http' paketine dahil edilmiştir.
HttpClient
Önceki .NET sürümlerinde ve Taşınabilir Sınıf kitaplıklarında sağlamak için varlar. Bu Microsoft.Net.Http
durumda kullanmalısınız .
.NET Core kullandığınız için, en son System.Net.Http
paketi kullanmalısınız (örn. 4.3.3).
Csproj için güncellendi
.NET Standard 2.0'dan itibaren, System.Net.HttpClient
paket zaten dahil edilmiştir ve hedeflediğinizde kullanılabilir netstandard2.0
. Herhangi bir nedenle, hem tam .NET hem de .NET Core için yine de başvurmak istiyorsanız, bunu csproj dosyanıza ekleyebilirsiniz:
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<!-- // HttpClient for full .NET -->
<Reference Include="System.Net.Http" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<!-- // HttpClient for .NET Core -->
<PackageReference Include="System.Net.Http" Version="4.3.3" />
</ItemGroup>
Project.json kullanıyorsanız
Project.json dosyanız hem tam .NET hem de .NET Core'u hedefliyorsa, System.Net.Http
derlemeyi frameworkAssemblies
öğeye eklemeniz gerekir . Örneğin:
"frameworks": {
"net451": {
"frameworkAssemblies": {
"System.Net.Http": "4.0.0.0" // HttpClient for full .NET
}
},
"netstandard1.3": {
"dependencies": {
"System.Net.Http": "4.1.0", // HttpClient for .NET Core
}
}
}
System.Net.Http
şimdi pakete dahil " seçeneğini görmüyorum Microsoft.Net.Http
. paket açıklamasında bahsettiğiniz dil. Aslında, System.Net.Http
paket en son güncellenmiş gibi görünüyor (birkaç yıl sonra)
Bununla ilgili daha fazla arka planla ilgilenen herkes için, Immo Landwerth (Microsoft'ta .NET üzerindeki program yöneticisi) bu konuda tweet attı :
"HttpClient bir NuGet paketi (bant dışı) olarak başladı ve 4.5'te .NET Framework'e de eklendi (kutuda).
.NET Core / .NET Standard ile, başlangıçta .NET platformunu, artık kutu içi ve bant dışı olmanın artık önemli olmadığı bir paket kümesi olarak modellemeye çalıştık. Ancak, bu beklediğimizden daha karmaşık ve karmaşıktı.
Sonuç olarak, .NET platformunu Core / Standard 2.0 ile bir NuGet grafiği olarak modelleme fikrinden büyük ölçüde vazgeçtik.
Genel cevap:
.NET Core 2.0 ve .NET Standard 2.0 ile SystemNetHttpClient NuGet paketine başvurmanız gerekmez. Yine de 1.x bağımlılıklarından çekilebilir.
Aynısı .NET Framework için de geçerlidir: 4.5 ve üstünü hedeflerseniz, genellikle NuGet paketi yerine kutudaki sürümü kullanmalısınız. Yine, .NET Standard 1.x ve PCL bağımlılıkları için onu çekebilirsiniz, ancak doğrudan .NET Framework'e karşı yazılan kod onu kullanmamalıdır.
Öyleyse paket neden hala var / neden hala güncelliyoruz? Bunun nedeni, ona bağımlı olan mevcut kodun çalışmasını sağlamak istiyoruz. Ancak, keşfettiğiniz gibi, .NET Framework üzerinde sorunsuz bir ilerleme sağlamaz.
Eski paket için amaçlanan model şudur: Eğer paketi .NET Framework 4.5+, .NET Core 2+, .NET Standard 2+ 'den tüketirseniz, paket kendi versiyonunu getirmek yerine yalnızca sağlanan platforma iletir.
Aslında her durumda olan bu değildir: HTTP İstemci paketi, .NET Framework üzerinde bazı müşteriler için işe yarayan ve diğerleri için başarısız olan kutudaki bileşenleri (kısmen) değiştirecektir. Dolayısıyla sorunu şimdi kolayca çözemiyoruz.
Bunun da ötesinde, .NET Framework ile ilgili olağan bağlama sorunlarımız var, bu nedenle bu yalnızca bağlama yönlendirmeleri eklerseniz gerçekten iyi çalışır. Yaşasın!
Bu nedenle, bir kitaplık yazarı olarak tavsiyem, bu pakete bağımlılıktan kaçınmak ve .NET Framework 4.5, .NET Core 2.0 ve .NET Standard 2.0'daki kutudaki sürümleri tercih etmektir. "
Microsoft.Net.Http
ek Microsoft.Bcl
bağımlılıklar gerektirir .
Bunun için, yalnızca .NET Framework veya .NET Core'u hedefliyorsanız, System.Net.Http
gitmeniz iyi olur. Aksi takdirde, Microsoft.Net.Http
gelecek nesil olacağı için daha iyi bir seçim olur.
System.Net.Http
göre değişirMicrosoft.Net.Http
. Ancak yine de, başvurunuzla ne yapmaya çalıştığınıza bağlıdır.