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

Why can't I use the TextInfo.ToTitleCase method in the Humanizer library?

我从他们的 GitHub page 下载了 Humanizer 库的代码,并且正在测试代码中的一些更改,这时我注意到 Intellisense window 中的黄色 "status warning" 图标TextInfo class:

上的一些方法

我以前从未在 Intellisense 中看到过这个图标,我想知道它是什么意思。我可以在普通应用程序中毫无错误地执行此方法调用。

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

这是我使用的代码:

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

这给出了这个错误:

'TextInfo' does not contain a definition for 'ToTitleCase' and no accessible extension method 'ToTitleCase' accepting a first argument of type 'TextInfo' could be found (are you missing a using directive or an assembly reference?)

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

am also unsure what Humanizer(netstandard1.0) - Not Available and Humanizer(netstandard2.0) - Available mean in this context.

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

您可以查看 documentation of ToTitleCase 以了解支持的版本。

他们正在做一些叫做 "multi-targeting" 的事情,他们的代码生成两个不同版本的库,一个与 netstandard1.0 API 兼容,另一个与 [=12= 兼容] API:

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

TextInfo.ToTitleCase() 直到版本 2.0 才被添加到 .Net Core,因此如果您的目标是版本 2.0 之前的任何 netstandard 框架,则无法使用它.请参阅 .NET Standard 以获取 runtimes/platforms 支持哪些 .Net Standard 版本的列表。

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

这样做的原因是提供一个更小且通常不那么复杂(代码方面)的库版本,可以在可以使用更高级别的项目中使用 API,但也是一个版本你不能使用更高级别 API。