小编ant*_*nta的帖子

C# 预处理器根据环境变量定义符号

我有一些这样的逻辑:

#define MYVAR
...
#if MYVAR
[Attribute1]
#else
[Attribute2]
#endif
Run Code Online (Sandbox Code Playgroud)

我希望能够根据环境变量切换应用于方法的属性,就像MYVAR设置环境变量一样,然后实际定义符号“MYVAR”,反之亦然。

老实说,我不知道这是否可能。如果没有任何想法如何克服这个问题?我当然可以将其添加到方法本身中 - env. 变量检查,但由于正在执行反射,我需要属性。我可以创建自定义MyAttrbute(int mode),但无法在其构造函数中添加逻辑来提取环境。变量,因为它必须是常量表达式。

可能的解决方案:

  • 就像第一条评论所暗示的那样,我可以阅读环境。自定义属性中的变量。仍然会有一些令人讨厌的反思要做。

  • 因为我使用 dotnet 命令在 Linux 上工作,所以我实际上可以将构建命令与 pre-step 命令捆绑在一起,并在文件顶部sed添加一个虚拟占位符,并将其替换为空字符串或基于 env 的完整字符串。变量。这里没有反射,但不是很优雅。{{define_myvar}}.cs

c# attributes preprocessor

3
推荐指数
1
解决办法
2437
查看次数

标签 统计

attributes ×1

c# ×1

preprocessor ×1