애플리케이션 크기를 줄이고 패키지 종속성을 간소화하며 서비스를 간소화하기 위해 .NET 11에는 기본 공유 프레임워크에 9개의 Microsoft.Extensions.* 라이브러리가 포함되어 있습니다. 이러한 패키지를 명시적으로 참조하는 프로젝트는 빌드 경고 NU1510을 받습니다. 를 제거 PackageReference하여 경고를 해결할 수 있습니다. 이러한 패키지의 이전 버전을 사용하는 경우 .NET 11 버전으로 업그레이드하면 이전 버전과 .NET 11 사이에 도입된 호환성이 손상되는 변경 내용이 노출될 수 있습니다.
도입된 버전
.NET 11 미리 보기 4
이전 동작
이전에는 다음 Microsoft.Extensions.* 라이브러리가 .NET 공유 프레임워크에 포함되지 않았습니다. (Sdk="Microsoft.NET.Sdk"를 사용하거나 마찬가지로 다른 .NET SDK 중 하나를 참조하면 공유 프레임워크를 사용할 수 있습니다.) 이것들이 필요한 프로젝트는 명시적으로 PackageReference 항목을 추가해야 했고, 빌드 프로세스에서 어셈블리를 출력 폴더로 복사했습니다.
- Microsoft.Extensions.Caching.Abstractions
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft. Extensions.DependencyInjection.Abstractions
- Microsoft.Extensions.Diagnostics.Abstractions
- Microsoft. Extensions.FileProviders.Abstractions
- Microsoft.Extensions.Hosting.Abstractions
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Options
- Microsoft. Extensions.Primitives
새 동작
.NET 11부터 이러한 9개의 라이브러리는 .NET 기본 공유 프레임워크의 일부입니다.
-
net11.0이상을 대상으로 하는 경우 이러한 라이브러리에는PackageReference가 필요하지 않습니다. - 이러한 패키지를 명시적으로 참조하는 경우 빌드 경고 NU1510이 표시됩니다.
- 이러한 어셈블리는 더 이상 출력 폴더에 복사되지 않습니다.
- 드물게 기본 로드 집합의 추가 API로 인해 이름 또는 형식 충돌이 발생할 수 있습니다. 충돌을 해결하려면 명시적
using지시문을 더 추가하거나 별칭을 사용하거나 정규화된 형식 이름을 사용합니다.
파괴적 변경 유형
이 변경은 동작 변경입니다.
변경 이유
이러한 일반적으로 사용되는 라이브러리를 공유 프레임워크에 포함하면 애플리케이션 크기가 줄어들고 패키지 종속성이 간소화되며 서비스가 간소화됩니다.
권장 작업
PackageReference 영향을 받는 패키지를 제거합니다.
net11.0 또는 그 이후만 대상으로 하는 프로젝트의 경우 PackageReference를 완전히 제거하세요:
<!-- Remove entries like these from your .csproj when targeting net11.0 only: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." />
<PackageReference Include="Microsoft.Extensions.Options" Version="..." />
코드는 수정 없이 계속 작동합니다. API는 이제 런타임의 일부입니다.
다중 대상 프로젝트(예: <TargetFrameworks>net10.0;net11.0</TargetFrameworks>)의 경우, 이전 TFM에 대해서는 패키지가 여전히 필요하므로 NU1510이 보고되지 않습니다. 작업이 필요하지 않습니다. NuGet은 각 대상 프레임워크에 대한 적절한 어셈블리를 자동으로 선택합니다. 명시적이 되도록 하려면 조건부로 참조를 포함할 수 있습니다.
<!-- Keep the reference only for TFMs that don't include it in the shared framework: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." Condition="'$(TargetFramework)' != 'net11.0'" />
컴파일 시간 이름 충돌 해결(드문 경우):
코드의 이름이 새로 포함된 API 중 하나와 충돌하여 컴파일 오류가 발생하는 경우 다음 방법 중 하나를 사용합니다.
- 더 구체적인
using지시문을 추가합니다. - 별칭을
using사용합니다. - 완전히 한정된 형식 이름을 사용합니다.
이전 버전의 패키지에 의존하는 경우:
MissingMethodException 또는 TypeLoadException 같은 런타임 오류를 방지하려면 .NET 11개 참조 어셈블리에 대해 종속 라이브러리 또는 이진 파일을 다시 컴파일합니다.
net11.0을 대상으로 하는 경우 PackageReference을 제거하고 다시 빌드하십시오. 이전 TFM 또는 다중 대상을 대상으로 하는 경우 대상net11.0 이외의 대상에 대한 패키지 참조를 현재 버전으로 업데이트한 다음 다시 컴파일합니다.
이러한 패키지의 .NET 11개 버전으로 업그레이드할 때 이전 버전의 다음과 같은 호환성이 손상되는 변경 내용이 나타날 수 있습니다.
Microsoft. Extensions.DependencyInjection.Abstractions
- ActivatorUtilities.CreateInstance는 일관되게 동작합니다.
- ActivatorUtilities.CreateInstance에 null이 아닌 공급자 필요
- FromKeyedServicesAttribute.Key 속성 nullable
- 키 지정 서비스를 찾을 수 없을 때 사용되는 키 미지정 서비스
- AnyKey를 사용하는 GetKeyedService 및 GetKeyedServices
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- BackgroundService에서 처리되지 않은 예외
- BackgroundService는 모든 ExecuteAsync를 작업으로 실행합니다.
- BackgroundService가 실패할 때 IHost.RunAsync 및 IHost.StopAsync throw
영향을 받는 API
없음.
.NET