我从GitHub page下载了Humanizer库的代码,并且在查看{{1}上的某些方法时,我在Intellisense窗口中注意到黄色的“状态警告”图标时,正在测试代码中的某些更改。 }}类:
我以前从未在Intellisense中看到过此图标,并且想知道它的含义。我可以在普通应用程序中进行此方法调用而不会出现任何错误。
在这种情况下,我也不确定TextInfo
和Humanizer(netstandard1.0) - Not Available
的含义。
这是我正在使用的代码:
Humanizer(netstandard2.0) - Available
出现此错误:
'TextInfo'不包含'ToTitleCase'的定义,并且找不到可以接受的扩展方法'ToTitleCase'接受类型为'TextInfo'的第一个参数(您是否缺少using指令或程序集引用?)>
为什么不能使用Humanizer库中的 public string Transform(string input)
{
TextInfo textInfo = CultureInfo.InvariantCulture.TextInfo;
return textInfo.ToTitleCase(input);
}
方法?
答案 0 :(得分:2)
在这种情况下,我还不确定什么是Humanizer(netstandard1.0)-不可用和Humanizer(netstandard2.0)-可用。
.NET Core 1.0(.netstandart = .NET Core)不支持ToTitleCase
方法,但在2.0版本中支持该方法。您可能使用的是不受支持的版本,因此会出现错误。
您可以查看documentation of ToTitleCase
来了解它支持哪些版本。
答案 1 :(得分:2)
他们正在执行一种称为“多目标”的操作,其中,他们的代码生成两种不同版本的库,一个版本与netstandard1.0
API兼容,另一个与netstandard2.0
API兼容:
<TargetFrameworks>netstandard1.0;netstandard2.0</TargetFrameworks>
TextInfo.ToTitleCase()
直到2.0版才被添加到.Net Core中,因此,如果您要定位netstandard
之前的任何2.0
框架,则无法使用它。有关哪些运行时/平台支持哪些.Net Standard版本的列表,请参见.NET Standard。
除非您使用的是“条件编译”编译器指令,否则您必须将代码限制为最低API支持的API。从本质上讲,您可以在其中为较低级别的目标提供高层API函数的替代实现。有关此示例,请参见Microsoft .Net Core文档中的How to Multitarget。
这样做的原因是提供一个较小且通常不太复杂(在代码方面)的库版本,该库可以在可以使用更高级别API的项目中使用,但也不能使用该版本。更高级别的API。