System.Net.Http ve Microsoft.Net.Http


Yanıtlar:


65

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

1
Aynı davranışa sahip olmadıklarının farkında olun. Tam .NET sürümü (4.0.0.0) otomatik sıkıştırma yapmazken .NET Core sürümü (4.1.0) yapar. Bu nedenle, tam .NET sürümünü kullanıyorsanız, işleyiciyi gzip / deflate sıkıştırmasını kullanacak şekilde manuel olarak yapılandırmanız gerekir. Açıklama: github.com/dotnet/docs/issues/1054
Jeppe Andersen

28
Bu cevap, bunun .NET Core, .NET Standard ve .NET Framework ile ne hale geldiğini özetliyor.
Vincent

1
@vincent İnsanların mono vb. kullandıklarında sırt ağrısından daha fazla sıkıntı yoktur. Çoklu platformun her zaman bazı acı noktaları vardır.
rulo

4
"Eski paket, 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)
Dan Esparza

2
@DanEsparza göndermiş olduğum bağlantıya bakarsanız mesajı göreceksiniz. Ayrıca sadece eski paketlerin (2.0 olanlar) kullanımdan kaldırıldığından bahsetmiştim . En son 4.xx paketleri gerçekten en yenisidir ve bunları kullanmalısınız.
Henk Mollema

19

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

https://twitter.com/terrajobst/status/997262020108926976


8

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.


8
Görünüşe göre MS, bu gönderinin ima ettiği gibi fikrini değiştirdi ... stackoverflow.com/questions/39016373/… microsoft.net.http 2015'ten beri güncellenmedi, system.net.http ise sadece birkaç aydır sago (nuget) .
smoore4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.