Как я могу нацелить библиотеку классов C# на поддержку NET_STANDARD и NET_COREAPP?

У меня есть библиотека классов, которая в настоящее время многоцелевой NET40 а также NETSTANDARD2.0:

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

Тем не менее, теперь мне нужно также поддерживать некоторые новые API, которые были добавлены как часть NETCOREAPP2.1 который не покрывается netstandard,

Моя первоначальная мысль состоит в том, чтобы просто расширить текущие рамки, чтобы включить NETCOREAPP2.1:

<TargetFrameworks>net40;netstandard2.0;netcoreapp2.1</TargetFrameworks>

<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.1'">
    <DefineConstants>NETCORE</DefineConstants> 
</PropertyGroup>

и в коде я могу использовать только что добавленный API:

#if NETCORE
    // Use the api added in NETCORE 2.1
#endif

Однако что произойдет, когда библиотека будет использоваться в приложении для более поздних версий .NET Core? например .NET Core 2.2? Нужно ли создавать новые константы для каждой недавно выпущенной версии?

В идеальном мире NETCOREAPP2.1 будет осуществлять NETSTANDARD2.1 но, к сожалению, это не так.

1 ответ

Просто создайте стандартную библиотеку.net 2.0. эта библиотека может использоваться.net (>= 4.6.1) или основными (>= 2.0) приложениями. обратная совместимость библиотеки гарантирована.

https://docs.microsoft.com/en-us/dotnet/standard/net-standard

Вы можете использовать строковые методы.Net внутри вашего условия:

<PropertyGroup Condition="$(TargetFramework.StartsWith('netcore'))">
    <DefineConstants>NETCORE</DefineConstants> 
</PropertyGroup>
Другие вопросы по тегам