【问题标题】:Why can't I use the TextInfo.ToTitleCase method in the Humanizer library?为什么我不能使用 Humanizer 库中的 TextInfo.ToTitleCase 方法?
【发布时间】:2019-01-27 01:46:03
【问题描述】:

我从他们的 GitHub page 下载了 Humanizer 库的代码,并正在测试代码中的一些更改,当我在查看 TextInfo 类上的某些方法时注意到 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 指令或程序集引用?)

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

【问题讨论】:

  • 我认为他的项目人性化的。我猜他正在检查源代码。
  • 我没有引用 Humanizer 的项目。我的代码更改在他们的项目中。
  • 哦,那么既然他们的目标是 netstandard1.0 netstandard2.0,你就不能使用 .toTitleCase() 而不将它包装在一些编译器指令中,因为它不是一部分netstandard1.0 API。
  • 我现在在Dependencies 下看到,Humanizer 列出了.NETStandard 1.0.NETStandard 2.0

标签: c# visual-studio humanizer


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    您可以查看documentation of ToTitleCase 以了解它支持哪些版本。

    【讨论】:

    • 那么这是否意味着 Humanizer 的早期版本(也许是我正在使用的那个)使用 .NET Core 1.0 而不是 2.0?
    • 不,它们是多目标的,这意味着它们的源代码会生成两个版本的库,一个支持netstandard1,0,一个支持netstandard2.0。这意味着您必须坚持使用这两个 API 中较低的一个,除非您使用条件编译器目标提供替代实现,请参阅上面的链接。
    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 2022-10-04
    • 2016-01-07
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多