Visual Studio #if在Visual Studio版本上

人民币

我想根据我使用的Visual Studio版本编译不同的东西,像

#if VISUAL_STUDIO_VERSION > 2015
eventH?.Invoke(this, EventArgs.Empty);
#else
if(eventH != null)
  eventH(this, EventArgs.Empty);
#endif

我怎样才能做到这一点?

我尝试了类似的东西:

#if (_MSC_VER==1700)

基于,没有运气。

编辑

我显然在WPF应用程序中需要它。

根据MSDN#如果在C#中只有布尔值。那么,有没有一种方法来定义基于VS版本或类似项目属性的象征?

sl

您所提到的称为#define,一个编译时间常数。这些定义需要被定义。(duh !!),如果未定义,则为空,因此表达式失败。您最初的链接示例是C ++的,因此自然不会在C#中为您定义。

在内部,Visual Studio使用MSBuild进行项目的实际编译(然后,MSBuild调用编译器)。您正在使用的Visual Studio版本不适用于MSBuild。甚至试图用一个预先构建宏将因为那是的MSBuild / TFSBuild的上下文中执行,在那个时间点Visual Studio是不是范围内不工作。

我还应该指出,您已经将Visual Studio版本与编译器版本混淆了-并且编译器版本本身也不能作为定义使用。

你最好的选择是创建和使用自定义的MSBuild / TFSBuild构建定义,然后你可以设置这些#define语句作为参数来构建,你还可以控制被调用哪个编译器(尽管这是太复杂,表现出作为一个答案在这里) 。您将有一个针对C#6编译器的构建定义,而一个针对默认编译器的构建定义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章