我有一些类似这样的逻辑:
#define MYVAR
...
#if MYVAR
[Attribute1]
#else
[Attribute2]
#endif
我想能够根据环境变量切换应用于方法的属性,就像如果设置了环境变量MYVAR
,则实际上定义符号'MYVAR',反之亦然。
说实话,我不知道是否可能。如果不行,有什么办法可以克服吗?当然我可以在方法本身中添加这个 - env. 变量检查,但是由于要执行反射,所以我需要这些属性。
我可以创建自定义的MyAttrbute(int mode)
,但无法在其构造函数中添加逻辑来提取env.变量,因为它必须是常量表达式。
可能的解决方案:
像第一个评论所建议的那样,在自定义属性中读取env.变量。仍然需要进行一些讨厌的反射工作。
因为我正在使用Linux with dotnet commands工作,我实际上可以将我的构建命令与预步骤
sed
命令捆绑在一起,并在.cs
文件的顶部添加一个虚假占位符{{define_myvar}}
,并根据env.变量用空字符串或完整字符串替换它。这里没有反射,但不太优雅。
#if xxx
将在编译时被评估。 - Lasse V. Karlsen