gpt4 book ai didi

nuget - 依赖于元包的 netstandard 库对应用程序有何影响?

转载 作者:行者123 更新时间:2023-12-01 23:50:55 25 4
gpt4 key购买 nike

假设我有一个类库,我想以 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 的世界,我会在 frameworks 部分中定位 netstandard1.3,并显式依赖于System.Runtime.Numerics,例如版本 4.0.1。我创建的 nuget 包将仅列出该依赖项。

在基于 csproj 的 dotnet 工具的美丽新世界中(我使用的是命令行工具 v1.0.1),有一个 implicit metapackage package reference当定位 netstandard1.3 时,为 NETStandard.Library 1.6.1。这意味着我的项目文件非常小,因为它不需要显式依赖项:

<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 (据我所知;我读过它 in an issue )并且在创建项目时将隐式依赖设置为默认值,Microsoft 鼓励用户只依赖元包 - 但是当我生成类库包时,如何确定它没有缺点?

最佳答案

过去,我们建议开发人员不要引用元数据来自 NuGet 包的包 (NETStandard.Library),而是引用单独的包,例如 System.Runtime 和 System.Collections。这理由是我们认为元包是一堆的简写包是 .NET 平台的实际原子构建 block 。这假设是:我们最终可能会创建另一个 .NET 平台,该平台仅支持其中一些原子 block ,但不支持全部。因此,您引用的包越少,您的可移植性就越高。人们还担心我们的工具如何处理大型包图。

展望 future ,我们将简化这一点:

  1. .NET Standard 是一个原子构建 block 。换句话说,新平台不允许对 .NET Standard 进行子集化——他们必须实现全部。

  2. 我们将不再使用包来描述我们的平台,包括 .NET 标准。

这意味着,您不必为 .NET Standard 引用任何 NuGet 包不再了。您表达了对 lib 文件夹的依赖关系,这正是如何它适用于所有其他 .NET 平台,特别是 .NET Framework。

但是,现在我们的工具仍然会在引用中燃烧NETStandard.Library。这也没有什么坏处,它只会变得多余的前进。

我将更新 FAQ在 .NET Standard 存储库中包含此问题。

更新:此问题现在为 part of the FAQ .

关于nuget - 依赖于元包的 netstandard 库对应用程序有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42946951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com