是否存在仅针对无平台修饰符的net6.0及以上版本的预处理器指令?
针对无平台修饰的.NET 6+版本的预处理器指令方案
你的类库项目目标框架包含net6.0、net6.0-windows10.0.18362、net6.0-android、net6.0-ios,需要筛选出仅不带平台后缀的纯跨平台.NET 6及以上版本执行的代码,以下是两种可行方案:
方案一:组合官方预处理器常量
直接通过NET6_0_OR_GREATER结合平台常量的取反来实现精准筛选:
#if NET6_0_OR_GREATER && !NET6_0_WINDOWS && !NET6_0_ANDROID && !NET6_0_IOS // 仅在纯net6.0(及更高版本的纯跨平台.NET,如net7.0)下执行的代码 #endif
原理:NET6_0_OR_GREATER确保版本在.NET 6及以上,!NET6_0_WINDOWS等条件则排除所有平台特定的.NET 6变体。如果后续新增了net7.0或其他纯跨平台版本,只需补充对应平台常量的取反(比如!NET7_0_WINDOWS)即可。
方案二:自定义专属预处理器常量(更灵活)
在项目的.csproj文件中,为纯跨平台的目标框架单独定义一个自定义常量:
<PropertyGroup> <TargetFrameworks>net6.0;net6.0-windows10.0.18362;net6.0-android;net6.0-ios</TargetFrameworks> </PropertyGroup> <!-- 为纯net6.0定义专属常量 --> <PropertyGroup Condition="'$(TargetFramework)' == 'net6.0'"> <DefineConstants>$(DefineConstants);NET_CROSSPLATFORM</DefineConstants> </PropertyGroup> <!-- 如果后续新增纯net7.0,添加对应配置 --> <PropertyGroup Condition="'$(TargetFramework)' == 'net7.0'"> <DefineConstants>$(DefineConstants);NET_CROSSPLATFORM</DefineConstants> </PropertyGroup>
之后在代码中直接使用自定义常量筛选:
#if NET_CROSSPLATFORM // 仅纯跨平台.NET版本执行的代码 #endif
这种方式的优势是无需维护冗长的排除条件列表,后续新增目标框架时只需添加对应配置即可。
补充说明
你之前尝试的NET和NET6_0_OR_GREATER无法满足需求,是因为这两个常量在所有基于.NET 6的平台特定版本(如net6.0-android)中同样会被定义,无法区分纯跨平台版本和平台变体。
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

