没有依赖性的netstandard 2.1中的跨度使用情况

时间:2020-03-31 11:37:21

标签: c# .net-standard

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

1 个答案:

答案 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上,您将需要

相关问题