본문 바로가기

.NET

API Analyzer 및 Windows 호환 기능 팩을 사용하여 더 똑똑한 크로스 플랫폼 .NET 핵심 응용 프로그램 작성

출처 : https://www.hanselman.com/blog/WritingSmarterCrossplatformNETCoreAppsWithTheAPIAnalyzerAndWindowsCompatibilityPack.aspx

지난 몇 주 동안 .NET 핵심 세계에서 주목해야 할 몇 가지 훌륭한 유틸리티가 있습니다. 크로스 플랫폼 코드를 이식하거나 작성할 때 유용합니다.

.NET API ANALYZER

첫 번째는 API 분석기 입니다. 아시다시피 API는 때로는 사용되지 않거나 Windows에서 메소드를 사용하여 Linux에서 작동하지 않는 경우가 있습니다. API Analyzer는 프로젝트 에 NuGet 패키지 로 쉽게 추가되는 Roslyn (Roslyn은 C # / .NET 컴파일러의 이름입니다) 분석기입니다 추가 만하면됩니다. 그러면 문제가 될 수있는 API를 호출하는 경고 및 / 또는 삐걱 소리가 즉시 시작됩니다.

이 간단한 예를 확인하십시오. 빠른 콘솔 앱을 만든 다음 분석기 를 추가합니다 이 게시물의 현재 시점은 버전입니다. 바뀔거야.

C : \ supercrossplatapp> dotnet 새 콘솔 
C : \ supercrossplatapp> dotnet 패키지 추가 Microsoft.DotNet.Analyzers.Compatibility --version 0.1.2-alpha

그런 다음 Windows에서만 작동하는 API를 사용합니다. 그러나, 나는 아직도 내 애플 리케이션을 사방에 실행 싶습니다.

static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
 
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        var w = Console.WindowWidth;
        Console.WriteLine($"Console Width is {w}");
    }
}

그런 다음 "dotnet build"(또는 빌드를 의미하는 실행)를하고 한 API가 어디서나 작동하지 않는다는 좋은 경고를받습니다.

C : \ supercrossplatapp> 

dotnet 빌드 Program.cs (14,33) : 경고 PC001 : Console.WindowWidth는 Linux, MacOSX [C : \ Users \ scott \ Desktop \ supercr
ossplatapp \ supercrossplatapp.csproj]에서 지원되지 않습니다. supercrossplatapp
-> C : \ supercrossplatapp \ bin \ Debug \ netcoreapp2.0 \ supercrossplatapp.dll

빌드가 완료되었습니다.

.NET 팀의 Olia 는 훌륭한 YouTube 동영상을 제작하여 API 분석기와 그 작동 방식을 보여줍니다 . API를 분석기에 대한 코드 까지 여기 GitHub의에 . 문제가 있으면 찾아주세요.

.NET CORE 용 WINDOWS 호환 기능 팩

둘째, .NET Core 용 Windows Compatibility Pack 은 멋진 기술입니다. .NET Core 2.0이 출시되고 .NET Standard 2.0이 완성 되면 32K 개 이상의 API가 포함되어 기존 .NET Framework 코드와 매우 호환됩니다. 실제로 호환 이 가능하여 15 년 된 .NET 응용 프로그램을 손쉽게 가져 와서 .NET Core 2.0으로 포팅 할 수있었습니다.

그들은에서 사용 가능한 API 세트를 두 배 더보다가 13K 에서 .NET 표준 1.6 에 32K 에 .NET 표준 2.0 .

.NET Standard 2.0은 다음 플랫폼 에서 지원 되므로 멋지다 .

  • .NET Framework 4.6.1
  • .NET Core 2.0
  • 모노 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Mac 3.8
  • Xamarin.Android 7.5

많은 Windows 관련 종속성이있는 .NET Core로 코드를 이식 할 때 .NET 표준 2.0의 일부가 아닌 API로 부딪 칠 수 있습니다. 따라서 이전에 .NET Framework에서만 사용할 수 있었던 API에 대한 액세스를 제공 하는 새로운 (미리보기) Microsoft.Windows.Compatibility NuGet 패키지 가 있습니다.

Compatibility Pack에는 두 가지 종류의 API가 있습니다. Windows의 일부분이었던 API는 원래  크로스 플랫폼을 지원하며 API는 슈퍼 OS에만 해당되므로 항상 Windows 만 사용할 수 있습니다. 예를 들어 Windows 레지스트리에 대한 API 호출은 항상 Windows 전용입니다. 그러나 System.DirectoryServices 또는 System.Drawing API는 어디서든 작동하는 방식으로 작성 될 수 있습니다 . 윈도우 호환 기능 팩은 20,000 개 API를 통해 추가 .NET 코어에서 이미 무엇의 위에. Immo가 compat pack에서 쏜 훌륭한 비디오를 확인하십시오 .

.NET의 코어를 사용에서 당신을 차단하는 API이의 compat 팩에서 사용할 경우 포인트는,이다 야호 ! 그러나 .NET Core를 가리키는 이유를 알고 있어야합니다. Windows의 .NET Core 및 .NET (Full) Framework 모두에서 작업이 계속됩니다. 현재 귀하의 응용 프로그램이 훌륭하게 작동한다면 .NET Core 특정 기능이 필요하지 않는 한 포트 할 필요가 없습니다. 다음 은 문서의 엄지 손가락 규칙 목록입니다.

서버 응용 프로그램 때를위한 .NET 코어를 사용하여 +

  • 당신은 크로스 플랫폼이 필요합니다.
  • 마이크로 서비스를 타겟팅하고 있습니다.
  • Docker 컨테이너를 사용 중입니다.
  • 고성능의 확장 가능한 시스템이 필요합니다.
  • 응용 프로그램마다 side-by-side .NET 버전이 필요합니다.

다음과 같은 경우 서버 응용 프로그램에 .NET Framework를 사용하십시오.

  • 귀하의 앱은 현재 .NET Framework를 사용합니다 (마이그레이션 대신 확장하는 것이 좋습니다).
  • 앱은 .NET 코어에서 사용할 수없는 써드 파티 .NET 라이브러리 또는 NuGet 패키지를 사용합니다.
  • 귀하의 응용 프로그램은 .NET 코어에서 사용할 수없는 .NET 기술을 사용합니다.
  • 앱에서 .NET Core를 지원하지 않는 플랫폼을 사용합니다.

마지막으로 작업에 적합한 API를 사용하는 데 도움이되는 몇 가지 다른 도구를 지적 해 두는 것이 좋습니다.