programing

System.Net.Http 대 Microsoft.Net.Http

nasanasas 2020. 10. 22. 08:06
반응형

System.Net.Http 대 Microsoft.Net.Http


ASP.NET Core를 사용하고 있습니다. 사용하고 HttpClient싶지만 두 개의 NuGet 패키지가 제공되는 것을 확인했습니다. 어느 것을 사용합니까?


버전에 따라 다릅니다. 이전 System.Net.Http패키지 ( 2.0 패키지 )는 Microsoft.Http.Net설명 따라 더 이상 사용되지 않는 레거시 패키지입니다 .

레거시 패키지 인 System.Net.Http는 이제 'Microsoft.Net.Http'패키지에 포함됩니다.

HttpClient이전 .NET 버전 및 Portable Class 라이브러리 를 제공하기 위해 존재합니다 . Microsoft.Net.Http이 경우에 사용해야합니다 .

.NET Core를 사용하고 있으므로 최신 System.Net.Http패키지 (예 : 4.3.3)를 사용해야합니다 .

csproj 업데이트

.NET Standard 2.0부터 System.Net.HttpClient패키지는 이미 포함되어 있으며 netstandard2.0. 어떤 이유로 든 전체 .NET 및 .NET Core 모두에 대해 참조하려는 경우 csproj 파일에 추가 할 수 있습니다.

<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을 사용하는 경우

project.json이 전체 .NET 및 .NET Core를 모두 대상으로하는 경우 System.Net.Http어셈블리를 frameworkAssemblies요소 에 추가 해야합니다 . 예를 들면 :

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

이에 대한 더 많은 배경 지식에 관심이있는 사람을 위해 Immo Landwerth (Microsoft의 .NET 프로그램 관리자) 는 이에 대해 트윗 했습니다.

"HttpClient는 NuGet 패키지 (대역 외)로 시작했으며 4.5에서도 .NET Framework에 추가되었습니다 (기본 제공).

.NET Core / .NET Standard를 사용하여 원래 .NET 플랫폼을 인 박스와 아웃 오브 밴드가 더 이상 중요하지 않은 패키지 세트로 모델링하려고했습니다. 그러나 이것은 우리가 예상했던 것보다 더 지저분하고 복잡했습니다.

그 결과 Core / Standard 2.0을 사용하여 .NET 플랫폼을 NuGet 그래프로 모델링하는 아이디어를 대부분 포기했습니다.

일반적인 대답은 다음과 같습니다.

.NET Core 2.0 및 .NET Standard 2.0을 사용하면 SystemNetHttpClient NuGet 패키지를 전혀 참조 할 필요가 없습니다. 그래도 1.x 종속성에서 가져올 수 있습니다.

.NET Framework도 마찬가지입니다. 4.5 이상을 대상으로하는 경우 일반적으로 NuGet 패키지 대신 기본 제공 버전을 사용해야합니다. 다시 말하지만 .NET Standard 1.x 및 PCL 종속성을 위해 끌어 올 수 있지만 .NET Framework에 대해 직접 작성된 코드는이를 사용하지 않아야합니다.

그렇다면 패키지가 여전히 존재하는 이유 / 업데이트하는 이유는 무엇입니까? 단순히 우리가 의존하는 기존 코드를 작동시키고 싶기 때문입니다. 그러나 .NET Framework에서는 순조롭게 진행되지 않는다는 사실을 알게되었습니다.

레거시 패키지의 의도 된 모델은 다음과 같습니다. .NET Framework 4.5+, .NET Core 2+, .NET Standard 2+에서 패키지를 사용하는 경우 패키지는 자체 버전을 가져 오는 대신 플랫폼 제공 구현으로 만 전달합니다.

모든 경우에 실제로 발생하는 것은 아닙니다. HTTP 클라이언트 패키지는 일부 고객에게는 작동하고 다른 고객에게는 실패하는 .NET Framework의 기본 구성 요소를 (부분적으로) 대체합니다. 따라서 지금은 쉽게 문제를 해결할 수 없습니다.

또한 .NET Framework에는 일반적인 바인딩 문제가 있으므로 바인딩 리디렉션을 추가하는 경우에만 제대로 작동합니다. 예이!

따라서 라이브러리 작성자는이 패키지에 대한 종속성을 피하고 .NET Framework 4.5, .NET Core 2.0 및 .NET Standard 2.0의 기본 제공 버전을 선호하는 것이 좋습니다. "

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


Microsoft.Net.Http추가 Microsoft.Bcl종속성이 필요합니다 .

이를 위해 .NET Framework 또는 .NET Core 만 대상으로하는 경우 사용하는 System.Net.Http것이 좋습니다. 그렇지 않으면 Microsoft.Net.Http다음 세대가 될 수 있으므로 더 나은 선택이 될 것입니다.

참고 URL : https://stackoverflow.com/questions/31053243/system-net-http-vs-microsoft-net-http

반응형