You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在仅针对无平台修饰符的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:03:33