gpt4 book ai didi

visual-studio - Visual Studio #if on Visual Studio 版本

转载 作者:行者123 更新时间:2023-12-04 07:37:23 31 4
gpt4 key购买 nike

我想根据我使用的 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)

基于 this没有运气。

编辑

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

基于 MSDN #if 在 c# 中只是 bool 值。那么,有没有办法根据VS版本或类似的东西在项目属性中定义一个符号?

最佳答案

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

在幕后,Visual Studio 使用 MSBuild 对您的项目进行实际编译(MSBuild 然后调用编译器)。你使用的 Visual Studio 版本不可用于 MSBuild。即使尝试使用预构建宏也不会起作用,因为它是在 MSBuild/TFSBuild 的上下文中执行的,此时 Visual Studio 不在上下文中。

我还应该指出,您将 Visual Studio 版本与编译器 版本混淆了——而且编译器版本本身也不是作为定义提供的。

您最好的选择是创建和使用自定义 MSBuild/TFSBuild 构建定义,然后您可以将这些 #defines 设置为构建的参数,您还可以控制调用哪个编译器(尽管这太复杂而无法显示为在这里回答)。您将拥有一个针对 C# 6 编译器的构建定义,以及一个针对默认编译器的构建定义。

关于visual-studio - Visual Studio #if on Visual Studio 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40108041/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com