【问题标题】:What is netfx preprocessor directive and how to activate it?什么是 netfx 预处理器指令以及如何激活它?
【发布时间】:2018-08-01 03:15:46
【问题描述】:

EasyNetQ 源代码使用 NETFX 编译符号来利用 TPL 库的改进\修复如下:

#if NETFX
            var tcs = new TaskCompletionSource<T>();
#else
            var tcs = new TaskCompletionSource<T>(TaskCreationOptions.RunContinuationsAsynchronously);
#endif

问题是这个符号是在哪里定义的,以及如何激活下面的执行路径?:

 var tcs = new TaskCompletionSource<T>(TaskCreationOptions.RunContinuationsAsynchronously);

更新: 我发现它是在https://github.com/EasyNetQ/EasyNetQ/pull/760 中介绍的,但仍然不知道它到底是什么。

更新2: 似乎它是基于目标框架定义的默认符号,用于区分完整框架和核心构建,但我在任何有关它的文档中都找不到它。我需要知道作为库使用者,如何将其激活到直接执行路径?

【问题讨论】:

    标签: c# .net compilation task-parallel-library easynetq


    【解决方案1】:

    我的最佳猜测是,它将用于区分 .NET Framework (NETFX) 和其他环境,如 .NET Standard 和 .NET Core。

    与 C# 中的所有编译符号一样,它会在项目设置中定义,并且可能会出现在针对 .NET Framework 的构建配置中(而不出现在其他构建配置中)。因此,要激活它,您只需更改项目的活动构建配置。

    【讨论】:

    • 我在构建配置中找不到它,它似乎是基于目标框架定义的默认符号,用于区分完整框架和核心构建,但我在任何文档中都找不到它.
    • @mehran 在 VS 或 C# 编译器中没有默认符号。如果您创建一个新的控制台应用程序项目并尝试使用 NETFX 符号,您会看到它没有定义。
    • 是的,我在 ENQ 中介绍了它。它是在 csproj 文件中定义的自定义指令。如果您想在库中使用 ENQ 中的指令特定代码,请参考完整的 .net 框架程序集。如果您想在项目中使用该指令,只需在您自己的 csproj 文件中重新定义即可。
    • @WiebeTijsma 谢谢,为什么我在 EasyNetQ 项目中看不到它,“条件编译符号”?
    • 我必须检查,但要到下周才能检查。如果我们现在只为 .NET 标准 2.0 编译,我们可能已经删除了它。不过,将它添加到您自己的项目中应该非常简单。
    猜你喜欢
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多