C# · 12月 29, 2021

c# – 根据编译器版本的条件编译

我正在寻找一种实现这样的方式: #if CSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHER foo?.Bar();#else if (foo != null) { foo.Bar(); }#endif

当然,我可以自己定义一个条件编译符号,但它不合适.

有没有内置的常数?
我发现的问题相当老了.也许事情变了最好?

解决方法 不,从我知道他们没有改变任何东西:-)

你可以在csproj里面做一点魔法来定义常量…但它是复杂的…

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

或者您可以查看CSC编译器的路径…它存储在CscToolPath中,如果为空,则在MsBuildToolsPath中.从那里可能您可以辨别CSC的版本.