netstandard1.3을 대상으로하는 클래스 라이브러리가 있지만 BigInteger
. 다음은 간단한 예입니다 Adder.cs
. 유일한 소스 파일은 다음과 같습니다.
using System;
using System.Numerics;
namespace Calculator
{
public class Adder
{
public static BigInteger Add(int x, int y)
=> new BigInteger(x) + new BigInteger(y);
}
}
의 세계로 돌아 가면 섹션 에서 project.json
대상 netstandard1.3
을 지정하고 버전 4.0.1 frameworks
에 대한 명시적인 종속성이 System.Runtime.Numerics
있습니다. 내가 만든 너겟 패키지는 해당 종속성 만 나열합니다.
csproj 기반 DOTNET 공구의 용감한 새로운 세계에있다 (I 명령 줄 도구 1.0.1을 사용하고 있습니다) 암시 적 메타 패키지 패키지 참조 를 NETStandard.Library 1.6.1
대상으로하는 경우는 netstandard1.3
. 이것은 명시적인 종속성이 필요하지 않기 때문에 내 프로젝트 파일이 정말 작다는 것을 의미합니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
...하지만 생성 된 너겟 패키지는에 종속되어 있습니다 NETStandard.Library
. 이는 내 작은 라이브러리를 사용하려면 거기에 모든 것이 필요함을 나타 냅니다.
을 사용하여 해당 기능을 비활성화 DisableImplicitFrameworkReferences
한 다음 수동으로 종속성을 다시 추가 할 수 있습니다 .
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Runtime.Numerics" Version="4.0.1" />
</ItemGroup>
</Project>
이제 내 NuGet 패키지가 정확히 무엇에 의존하는지 알려줍니다. 직관적으로 이것은 "간단한"패키지처럼 느껴집니다.
그렇다면 내 도서관 소비자의 정확한 차이점은 무엇입니까? 누군가 UWP 응용 프로그램에서이를 사용하려고하면 두 번째 "잘린"형태의 종속성이 결과 응용 프로그램이 더 작아진다는 의미입니까?
DisableImplicitFrameworkReferences
명확하게 문서화하지 않고 (내가 본 적이 있는 한 문제에서 읽었습니다 ) 프로젝트를 만들 때 암시 적 종속성을 기본값으로 설정함으로써 Microsoft는 사용자가 메타 패키지에만 의존 하도록 권장하고 있습니다. 클래스 라이브러리 패키지를 만들 때 단점이 없는지 확인하십시오.
Hello World!
자체 포함 된 애플리케이션 의 크기는 10MB 미만으로 줄어 듭니다.