【发布时间】:2019-09-26 00:53:48
【问题描述】:
我在调试模式下的项目包含仅支持 C# 7.3 的结构。但在 Release 模式下,项目应基于 C# 7.0 构建,无需特定代码行。
我知道一些标准预处理器符号,例如 NET472 和 NETSTANDARD2_0,但它用于处理不同的标准及其版本。而且对语言版本条件没有用。
public static Expression<TDelegate> CreateExpression<TDelegate>()
where TDelegate : Delegate // Work in 7.3 and above
{ ... }
我期待一些技巧,比如
#if CSharpVersion >= 7.3
where TDelegate : Delegate
#endif
现在我使用那个语句:
#if DEBUG
where TDelegate : Delegate
#endif
但如果我在项目属性中更改语言版本,它将不起作用。
【问题讨论】:
-
拥有这种不同编译过程的用例是什么?为什么不在 7.3 中编译发行版?
-
为了回答您的问题,编译器版本没有内置变量。您必须自己管理。
-
C# 没有预处理器,#if 指令被故意削弱以不允许表达式。他们故意不想重现 C 和 C++ 的噩梦。务实的做法是不要更改语言版本。或者在项目属性中定义“CSharpVersion73”,这样您就可以使#if 工作。
标签: c# preprocessor preprocessor-directive c#-7.3 ifdefine