我可以根据编译器版本进行条件编译吗?

时间:2008-09-26 02:22:27

标签: c# visual-studio-2008

我正在维护.net 1.1和.net 3.5 c#代码。为此,我创建了两个csproject文件,一个用于.net 1.1,另一个用于.net 3.5。

现在,在我的源代码中,我添加了仅在.net 3.5版本中可用的新功能,但我还希望代码在VS 2003中编译,没有新功能。反正有没有根据编译器版本进行条件编译?

在C ++ I can do this by checking the value中为宏_MSC _VER,但我正在寻找一个C#等价物。

2 个答案:

答案 0 :(得分:1)

您可以在每个CSPROJ文件中定义不同的符号,并参考C#源代码中的符号。

答案 1 :(得分:0)

如果你可以将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/en-us/library/system.diagnostics.conditionalattribute.aspx

如果可能,由于你已经有2个项目文件,你可以在每个文件中指定一个不同的定义来设置版本 - 当你可以自己创建时,不需要查找宏。

相关问题