如何为C#类库多目标以同时支持NET_STANDARD和NET_COREAPP?

时间:2019-01-07 13:29:55

标签: c# .net .net-core multitargeting

我有一个类库,该类库当前是多目标NET40NETSTANDARD2.0

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

但是,我现在还需要支持一些新的api,这些新的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,但不幸的是THIS并非如此。

2 个答案:

答案 0 :(得分:0)

just create a .net standard 2.0 library. this lib can be used by .net (>= 4.6.1) or core (>= 2.0) applications. the downwards compatibility of an lib is guaranteed.

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

答案 1 :(得分:0)

您可以在条件内使用.Net字符串方法:

<PropertyGroup Condition="$(TargetFramework.StartsWith('netcore'))">
    <DefineConstants>NETCORE</DefineConstants> 
</PropertyGroup>