ASP.NET Core kullanıyorum. HttpClientKullanmak istiyorum ancak iki NuGet paketi sunulduğunu fark ettim. Hangisini kullanıyorum?
ASP.NET Core kullanıyorum. HttpClientKullanmak 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.Httppaketler ( 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.Httpdurumda kullanmalısınız .
.NET Core kullandığınız için, en son System.Net.Httppaketi kullanmalısınız (örn. 4.3.3).
Csproj için güncellendi
.NET Standard 2.0'dan itibaren, System.Net.HttpClientpaket 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.Httpderlemeyi 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.Httppaket 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.Httpek Microsoft.Bclbağımlılıklar gerektirir .
Bunun için, yalnızca .NET Framework veya .NET Core'u hedefliyorsanız, System.Net.Httpgitmeniz iyi olur. Aksi takdirde, Microsoft.Net.Httpgelecek nesil olacağı için daha iyi bir seçim olur.
System.Net.Httpgöre değişirMicrosoft.Net.Http. Ancak yine de, başvurunuzla ne yapmaya çalıştığınıza bağlıdır.