我可以基于编译器版本进行条件编译吗?
时间:2020-03-06 14:45:43 来源:igfitidea点击:
我正在一次维护.net 1.1和.net 3.5 ccode。为此,我创建了两个csproject文件,一个用于.net 1.1,另一个用于.net 3.5.
现在,在我的源代码中,我添加了仅在.net 3.5版本中可用的新功能,但是我还希望该代码在VS 2003中进行编译,而没有这些新功能。无论如何,是否有基于编译器版本的条件编译?
在C ++中,我可以通过检查宏_MSC _VER的值来做到这一点,但是我正在寻找一个等价的。
解决方案
我们可以在每个CSPROJ文件中定义不同的符号,并在Csource中引用这些符号。
如果可以将3.5个特定的代码保留在单独的文件中,则可以简单地在两个.csproj文件之间拆分文件分配(或者在NAnt中使用2个不同的构建目标),因为糟糕的部分类仅在2.0中出现,否则将使其成为现实。更容易在周围散布代码...
如果需要在文件级别混合代码,则[Conditional()]属性可以过滤掉整个方法,但是我不确定编译器是否仍将尝试处理该方法中的代码。 MSDN说代码不会被编译成IL,但是参数将进行类型检查,但是我还没有尝试过。此处的更多信息:http://bartdesmet.net/blogs/bart/archive/2006/08/30/4368.aspx和MSDN链接位于:http://msdn.microsoft.com/zh-cn/library/ system.diagnostics.conditionalattribute.aspx
如果可能的话,由于我们已经有2个项目文件,因此可以在每个文件中指定一个不同的定义来设置版本,而无需自己定义宏。