取决于编译器版本的条件编译
Conditional compilation depending on compiler version
我正在寻找一种方法来实现类似这样的功能:
#if CSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHER
foo?.Bar();
#else
if (foo != null)
{
foo.Bar();
}
#endif
当然可以自己定义一个条件编译符号,但是不合适
是否有内置常量?
我发现的问题相当陈旧。也许,东西都变好了?
不,据我所知他们没有改变任何东西:-)
您或许可以在 csproj 中做一些魔术来定义常量...但它很复杂...
没有直接指定CSC版本的属性...有一个属性($(LangVersion)
)指定所需语言标准的版本.. . 但它通常设置为 default
所以 "the maximum the compiler supports"...
或者您可以查看 CSC 编译器的路径...它存储在 CscToolPath
中,如果为空,则存储在 MsBuildToolsPath
中。从那里也许你可以辨别出 CSC 的版本。
我正在寻找一种方法来实现类似这样的功能:
#if CSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHER
foo?.Bar();
#else
if (foo != null)
{
foo.Bar();
}
#endif
当然可以自己定义一个条件编译符号,但是不合适
是否有内置常量?
我发现的问题相当陈旧。也许,东西都变好了?
不,据我所知他们没有改变任何东西:-)
您或许可以在 csproj 中做一些魔术来定义常量...但它很复杂...
没有直接指定CSC版本的属性...有一个属性($(LangVersion)
)指定所需语言标准的版本.. . 但它通常设置为 default
所以 "the maximum the compiler supports"...
或者您可以查看 CSC 编译器的路径...它存储在 CscToolPath
中,如果为空,则存储在 MsBuildToolsPath
中。从那里也许你可以辨别出 CSC 的版本。