1

.Netstandard2는 .Net Core 2.0 및 vs2017.3과 함께 nuget4.3 및netstandard 2.0 및 netcore 2.0의 최종 릴리스에서 전체 프레임 워크를 사용할 수있는 동안 netstandard2 라이브러리를 구축해야하는 이유 4.6.1

Announcing .NET Core 2.0

에서 인용 net461 API 표면 커버 (41 개 클래스 제외) 32K 및 전체 커버는 이제 비주얼 스튜디오 2017 15.3을 사용하여 .NET 표준 라이브러리에서 .NET 프레임 워크의 라이브러리를 참조 할 수 있습니다. 이 기능을 사용하면 시간이 지남에 따라 .NET Framework 코드를 .NET Standard 또는 .NET Core로 마이그레이션 할 수 있습니다 (바이너리로 시작한 다음 소스로 이동). 소스 코드가 더 이상 액세스 할 수 없거나 .NET Framework 라이브러리에서 손실되어 새로운 시나리오에서 여전히 사용할 수있는 경우 유용합니다.

이 기능은 .NET 표준 라이브러리에서 가장 일반적으로 사용되기를 기대합니다. .NET 핵심 애플 리케이션 및 라이브러리에서도 작동합니다. .NET Framework 라이브러리도 사용할 수 있습니다.

지원되는 시나리오는 .NET Standard API 집합 내의 형식 만 사용하는 .NET Framework 라이브러리를 참조합니다. 또한 .NET Framework 4.6.1 이하를 대상으로하는 라이브러리 (.NET Framework 1.0도 괜찮습니다)에서만 지원됩니다.

그래서 .netcore2 환경에서 우리는 .netstandard2 라이브러리로 전환 할 필요없이 오랫동안 해왔 던 것처럼 .Net Framework 전체를 계속 빌드하고 사용할 수 있습니다.

멀티 타겟 프로젝트 (net64; netstandard2)를 사용하면 같은 API 범위에서 .net 표준 2.0 무료 (0 시간 노력)를 얻을 수 있습니다.

다음에 관한 경험을 공유 할 수 있습니까? 전체 프레임 워크 4.6.1 클래스 라이브러리를 계속 빌드하고 .netcore2에서 사용할 수 있습니까? 한계는 무엇입니까?

답변

0

.NET Framework 라이브러리를 빌드 할 때 4.6.1 .NET 표준 만 사용할 수 있습니다. 예를 들어에있는 최신 API를 사용하려는 경우 netstandard2.0 또는 .NET 4.7을 사용하려면 라이브러리를 4.7로 다시 지정해야합니다. 그런 다음 netstandard2.0/netcoreapp2.0 프로젝트에서 사용할 수 없습니다. 효과적으로 .NET Framework 버전 4.6.1에 고정되어 있으며 최신 버전으로 업데이트 할 수 없습니다. 물론 암시적인 대체 정의를 비활성화하고 소모 프로젝트에서 수동으로 AssetTargetFallback을 설정하는 방법이 있지만 수동으로 .csproj 파일을 편집하고 모든 패키지 사용자에게 그렇게하도록 지시해야합니다.

또한 호환 레이어는 netstandard에 구현되지 않은 API를 사용하는 것을 막지 않으므로 소모하는 프로젝트는 누락 된 유형, 메서드, 어셈블리 등에 대한 예외를 가져올 수 있습니다. .NET Standard를 대상으로 할 때만 라이브러리가 .NET 표준 준수 플랫폼에서 작동합니다.

현재 .NET Core의 .NET Framework 라이브러리 프로젝트 (!) (NuGet 패키지가 아님)를 참조 할 수 없거나 특정 설정 및 해결 방법에서만 작동한다는 점에 실질적인 제한이 있습니다. 호환되지 않는 대상 프레임 워크 경고가 표시됩니다.

+0

문제는 netstandard2 프로젝트가 netstandar1.3 패키지 (예 : 적은 기능) 인 반면 net461 프로젝트에서는 net45 (전체 기능)를 참조하고 netcore2에서 잘 작동한다는 것입니다. netstandard1.3이 아닌 net45를 설치하기 위해 netstandard2를 적용하는 방법 (디스크에서 수동으로 참조하는 DLL 제외)이 있습니까? 단위 테스트를 통해 사용의 유효성과 호환성 문제를 확인할 수 있습니다. 왜냐하면 70 % 너겟 패키지는 대부분 net45와 netstandard1.3 준비가되어 있기 때문입니다. –

+0

아니요, NuGet은 항상 "가장 가까운"프레임 워크를 선택합니다.이 프레임 워크는 기능 세트가 적을지라도 항상 동일한 프레임 워크입니다.net 호환은 다른 호환되는 프레임 워크가없는 경우에만 대체 될 수 있습니다. –