3

我从他们的GitHub 页面下载了 Humanizer 库的代码,并正在测试代码中的一些更改,当我在查看TextInfo类上的某些方法时注意到 Intellisense 窗口中有一个黄色的“状态警告”图标时:

方法 Intellisense 的状态警告

我以前从未在 Intellisense 中看到过这个图标,我想知道它的含义。我可以在普通应用程序中执行此方法调用而不会出现任何错误。

我也不确定在这种情况下是什么意思Humanizer(netstandard1.0) - Not AvailableHumanizer(netstandard2.0) - Available

这是我正在使用的代码:

public string Transform(string input)
{
    TextInfo textInfo = CultureInfo.InvariantCulture.TextInfo;
    return textInfo.ToTitleCase(input);
}

这给出了这个错误:

“TextInfo”不包含“ToTitleCase”的定义,并且找不到接受“TextInfo”类型的第一个参数的可访问扩展方法“ToTitleCase”(您是否缺少 using 指令或程序集引用?)

为什么我不能使用 TextInfo.ToTitleCase(...) Humanizer 库中的方法?

4

2 回答 2

2

我也不确定 Humanizer(netstandard1.0) - Not Available 和 Humanizer(netstandard2.0) - Available 在这种情况下的含义。

ToTitleCase方法在 .NET Core 1.0 (.netstandart = .NET Core) 中不受支持,但在 2.0 版本中受支持。您可能正在使用不受支持的那个,因此您会收到错误消息。

您可以查看文档 ToTitleCase以查看支持的版本。

于 2018-08-20T22:11:54.213 回答
2

他们正在做一些称为“多目标”的事情,他们的代码生成两个不同版本的库,一个与netstandard1.0API 兼容,另一个与netstandard2.0API 兼容:

 <TargetFrameworks>netstandard1.0;netstandard2.0</TargetFrameworks>

TextInfo.ToTitleCase()netstandard直到版本 2.0 才添加到 .Net Core,因此如果您针对版本之前的任何框架,则无法使用它2.0。有关哪些运行时/平台支持哪些 .Net Standard 版本的列表,请参阅.NET Standard

您必须将代码限制为最低 API 支持的 API,除非您使用“条件编译”编译器指令。这些本质上是您为较低级别目标提供较高级别 API 函数的替代实现的地方。有关此示例,请参阅Microsoft .Net Core 文档中的How to Multitarget 。

这样做的原因是提供一个较小且通常不太复杂(代码明智)的库版本,可以在可以使用更高级别 API 的项目中使用,但也提供一个您不能使用更高级别 API 的版本.

于 2018-08-21T18:11:33.100 回答