.net core 库是否应该明确以.NET Core 3为目标?
随着.NET标准2.0的发布,建议将目标定为.NET标准2.0,即使您已经将目标定为1.x : 但是,针对较低的.NET标准版本会引入许多支持依赖项。如果您的项目以.NET标准1.x为目标,我们建议您也以.NET标准2.0为目标。这简化了运行在.NET标准2.0兼容框架上的库用户的依赖关系图,并减少了他们需要下载的包的数量 现在又一个大的变化就要到来了。NET Core 3,我看到Microsoft也将.NET Core 3作为Microsoft软件包的目标 例如,目标是.NET标准2.0和.NET核心3(.NETCoreApp 3.0): 我比较了XML文件,两个API看起来都一样(可能不是比较它们的最佳方式) 现在是问题;) 作为依赖Microsoft.Extensions.Logging的库维护人员,尝试支持.NET Core 3:.net core 库是否应该明确以.NET Core 3为目标?,.net-core,nuget,nuget-package,.net-core-3.0,.net Core,Nuget,Nuget Package,.net Core 3.0,随着.NET标准2.0的发布,建议将目标定为.NET标准2.0,即使您已经将目标定为1.x : 但是,针对较低的.NET标准版本会引入许多支持依赖项。如果您的项目以.NET标准1.x为目标,我们建议您也以.NET标准2.0为目标。这简化了运行在.NET标准2.0兼容框架上的库用户的依赖关系图,并减少了他们需要下载的包的数量 现在又一个大的变化就要到来了。NET Core 3,我看到Microsoft也将.NET Core 3作为Microsoft软件包的目标 例如,目标是.NET标准2.0和.N
如果我不需要.NET Core 3的特定内容,我是否也应该以.NET Core 3为目标?或者仅仅是.NET Standard 2.0就足够了 如果您不想使用.NET Core 3中的任何内容,或者不想提供任何.NET Core 3优化,则不必以.NET Core 3为目标。另一方面,双重目标不需要花费任何成本,并且可以让您摆脱现在内置在.NETCore3中的库引用。至少,您可以摆脱运行时附带的一些库引用
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<Reference Include="System.Text.Json" />
<Reference Include="System.Threading.Tasks.Extensions" />
</ItemGroup>
长答案
这完全取决于你在做什么,你想做什么。库不必仅仅因为其依赖项将.NET Core 3.0包含在其目标中而以.NET Core 3.0为目标
例如,Microsoft.Extensions.Logging
似乎没有任何特定于C#8/.NET核心3.0的代码。它的目标是3.0,因为它是扩展浪潮的一部分,所以双重目标不需要任何修改
另一方面,不必引用System.Text.Json
和System.Threading.Tasks.Extensions
,因为它们是运行时的一部分
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<Reference Include="System.Text.Json" />
<Reference Include="System.Threading.Tasks.Extensions" />
</ItemGroup>
这是一个小但非常方便的添加。它允许您通过以下方式接收消息:
await foreach(var msg from reader.ReadAllAsync())
{
....
}
另一方面,NRTs甚至对.NET Standard 2.0也有帮助,因为在编译.NET Core 3.0时,NRTs可以帮助您捕获源代码中的可空性错误。当有人安装包时,NuGet使用TFM中与项目TFM最匹配的资产。它也对可传递依赖项执行此操作 例如,如果项目目标netcore30和包A在lib/netcore30和lib/netstandard20下有资产,nuget将选择lib/netcore30。假设包A依赖于B,包B有netstandard20的资产,net472,nuget将选择netstandard20 底线是,nuget将为图中的每个包选择最佳匹配的资产。因此,作为库维护者,您不需要添加两个TFM来支持netcore30。您可以将netstandard21作为目标,这意味着基于此文档支持netcore30 作为依赖于 Microsoft.Extensions.Logging,正在尝试支持.NET Core 3的用户: 我应该也瞄准.NETCore3吗?还是仅仅是.NETStandard2.0好 如果我不需要.NETCore3的特定内容,就足够了吗 只要库中的所有依赖项都以.NET标准2.0为目标,包括
Microsoft.Extensions.Logging
,那么将.NET标准2.0作为目标就足够了
同样,为您的库的消费者确定.NET Core 3.0的目标可能会有好处,因此,如果是这样,并且成本不会太高,那么除了.NET标准2.0之外,一定要确定.NET Core 3.0的目标
同样,nuget将始终为图中的每个包选择最佳匹配的资产。i、 e
- 应用程序A使用您的库并以.NET Core 3.0为目标。您的库仅针对.NET标准2.0。努吉会用的,没关系
- 应用程序A使用您的库并以.NET Core 3.0为目标。您的库同时面向.NET标准2.0和.NET核心3.0。NuGet将选择.NETCore3.0
.NET Core 3.0
而不是.NET Standard2.1
?