条件编译取决于编译器版本

本文关键字:版本 编译器 取决于 编译 条件 | 更新日期: 2023-09-27 18:07:48

我正在寻找一种方法来实现这样的东西:

#if CSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHER
    foo?.Bar();
#else
    if (foo != null)
    {
        foo.Bar();
    }
#endif

当然,我可以自己定义一个条件编译符号,但这是不合适的。

是否有任何内置常量?
我发现的问题相当古老。也许,一切都变好了?

条件编译取决于编译器版本

不,据我所知他们没有改变任何东西:-)

你也许可以在csproj中做一些魔术来定义常量…但这很复杂……

没有直接指定CSC版本的属性…有一个属性($(LangVersion))指定所需的语言标准的版本…但通常设置为default,因此"编译器支持的最大值"…

或者你可以看看CSC编译器的路径…它被存储在CscToolPath中,如果是空的,则存储在MsBuildToolsPath中。从那里你也许可以辨别出CSC的版本。