The C# span docs list涵盖的范围适用于.NET Core 2.1+和.NET Standard 2.1。在Announcing .NET Standard 2.1中,Span<T>
被列为发行版的#1高亮部分。第三方的文章还列出了.NET Standard 2.1中Span<T>
的添加。
我理解这些证据表明,在netstandard2.1目标库中可以像在netcoreapp2.1目标库中一样使用span。我在具有零依赖关系的我的一个库中尝试了此操作,如果其中一个目标是netcoreapp2.1,则该库的span API可用-例如:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netcoreapp2.1;netstandard2.1</TargetFrameworks>
</PropertyGroup>
<!-- snip -->
<PropertyGroup Condition="'$(TargetFramework)'=='netcoreapp2.1' Or '$(TargetFramework)'=='netstandard2.1'">
<LangVersion>7.2</LangVersion>
</PropertyGroup>
</Project>
(代码段中使用的netstandard2.0是目标的示例,该库不会公开Span
兼容的API,因为它需要System.Memory
依赖性)
但是事实并非如此(针对netstandard2.1时出现“找不到类型或名称间距'Span <>'的错误)
该库的目标是使零依赖关系成为现实,所以我宁愿不依赖System.Memory
。
是否可以在无依赖性的netstandard 2.1库中使用Span
,就像在无依赖性的netcoreapp2.1中使用Span
一样?
编辑:答案是“是的,可以在netstandard 2.1中使用Span<T>
,而无需依赖”。我的头有个虫子
#if NETCOREAPP2_1
using System;
#endif
代替
#if (NETCOREAPP2_1 || NETSTANDARD2_1)
using System;
#endif
愚蠢的错误。 Kinda希望我现在可以删除此问题:D
答案 0 :(得分:1)
您需要System.Memory:
<PackageReference Include="System.Memory" Version="4.5.4" />
您可以使此依赖项为有条件的,例如仅将其添加到netstandard2.0上:
<PackageReference Include="System.Memory" Version="4.5.4"
Condition="'$(TargetFramework)'=='netstandard2.0'"/>
这意味着您只能在实际需要时使用依赖项 ,但是:在本质上没有依赖项的TFM上,您将需要。