Как я могу нацелить библиотеку классов 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>