Почему я не могу использовать метод TextInfo.ToTitleCase в библиотеке Humanizer?

Я загрузил код для библиотеки Humanizer со страницы GitHub и тестировал некоторые изменения в коде, когда заметил желтый значок "предупреждение о состоянии" в окне Intellisense при просмотре некоторых методов в TextInfo учебный класс:

Предупреждение о состоянии по методу Intellisense

Я никогда раньше не видел эту иконку в Intellisense и хочу знать, что это значит. Я могу сделать этот вызов метода без каких-либо ошибок в обычном приложении.

Я также не уверен, что Humanizer(netstandard1.0) - Not Available а также Humanizer(netstandard2.0) - Available значит в этом контексте.

Вот код, который я использую:

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

который дает эту ошибку:

"TextInfo" не содержит определения для "ToTitleCase", и невозможно найти доступный метод расширения "ToTitleCase", принимающий первый аргумент типа "TextInfo" (вы пропустили директиву using или ссылку на сборку?)

Почему я не могу использовать TextInfo.ToTitleCase(...) метод в библиотеке Humanizer?

2 ответа

Решение

Они делают то, что называется "мульти-таргетинг", когда их код создает две разные версии библиотеки, одна из которых совместима с netstandard1.0 API и другой совместимый с netstandard2.0 API:

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

TextInfo.ToTitleCase() не был добавлен в.Net Core до версии 2.0, поэтому он недоступен для использования, если вы нацелены на netstandard рамки до версии 2.0, См. Стандарт.NET для получения списка того, какие среды выполнения / платформы поддерживают, какие версии.Net Стандарт.

Вы должны ограничить свой код API, который поддерживается самым низким API, если только вы не используете директивы компилятора "условной компиляции". По сути, именно здесь вы предоставляете альтернативные реализации API-функций более высокого уровня для цели более низкого уровня. Посмотрите Как Многоцелевой в Документах Microsoft.Net Core для примера этого.

Причина для этого заключается в том, чтобы предоставить меньшую и, как правило, менее сложную (по кодам) версию библиотеки, которая может использоваться в проектах, которые могут использовать API более высокого уровня, но также и версию, в которой вы не можете использовать API более высокого уровня.,

Я также не уверен, что Humanizer(netstandard1.0) - Недоступно и Humanizer(netstandard2.0) - Доступно означает в этом контексте.

ToTitleCase метод не поддерживается в.NET Core 1.0 (.netstandart = .NET Core), но поддерживается в версии 2.0. Возможно, вы используете тот, который не поддерживается, поэтому вы получите ошибку.

Вы можете посмотреть на документацию ToTitleCase чтобы увидеть, в каких версиях он поддерживается.

Другие вопросы по тегам