如何使用汇编版本的预处理器条件?

时间:2011-03-08 16:46:30

标签: c# .net

目前在我的代码中我有这个if语句:

if (System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.Major > 0)
{
     //Stuff that will execute when we get out of beta
}

由于可以在编译时预测这个语句的结果,我想知道,只是出于好奇,是否有办法用类似的东西替换它

#if MAJOR_VERION > 0
//Do stuff
#endif

另外,如果这是可能的,那么它是好还是坏.net实践?

3 个答案:

答案 0 :(得分:5)

你不能这样做 - 预处理器符号要么“开”或“关”(定义与否),而不是数字值。

您可以在适当的项目配置中轻松定义BETA预处理器符号。然后,您可以在测试结束时将其删除。

(我不确定这样的条件化代码通常是个好主意,请注意。如果在测试结束之前不打算执行该代码,您将如何测试该代码? )

答案 1 :(得分:3)

您只能在C#中的预处理程序指令中使用==!=条件。

请参阅MSDN

  

您可以使用运算符==(相等),!=(不等式)来测试true或false。 True表示符号已定义。语句#if DEBUG与#if(DEBUG == true)具有相同的含义。

您可以自己定义符号,项目文件,command line或代码(#define)。

答案 2 :(得分:2)

  

由于可以在编译时预测此语句的结果

不是。引用程序集不必与运行时程序集匹配。 .config文件中的发布者策略或<BindingRedirect>元素允许在运行时加载另一个版本的程序集而不会出现异常。 .NET中的程序集绑定非常动态。您可以在代码中使用#if指令(不要使用表达式),当您必须支持多个平台目标时,不要使用非典型指令,但您的原始方法是更通用的解决方案。