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

У меня есть библиотека классов, в которой в настоящее время используется многоцелевой 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, но, к сожалению ЭТО не так.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

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

<PropertyGroup Condition="$(TargetFramework.StartsWith('netcore'))">
    <DefineConstants>NETCORE</DefineConstants> 
</PropertyGroup>
0 голосов
/ 07 января 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...