假设我有一个要针对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
本frameworks
节为目标,并明确依赖于System.Runtime.Numerics
例如4.0.1版。我创建的nuget包将仅列出该依赖项。
在基于csproj的dotnet工具的崭新世界(我正在使用命令行工具的v1.0.1),在目标定位时有一个隐式的metapackage包引用。这意味着我的项目文件非常小,因为它不需要显式依赖:NETStandard.Library 1.6.1
netstandard1.3
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
...但是生成的nuget包依赖于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。