#if !NETCF什么意思?
看log4net的代码,发现其中有很多类似如下的代码:
#if DEBUG
#if !SSCLI
#if NET_2_0
#if NET_4_0
#if NETCF_1_0
#if !MONO
#if !NETCF && !SSCLI && !CLIENT_PROFILE
#if !CLI_1_0
#if CONFIRM_WIN32_FILE_SHAREMODES
#if CLIENT_PROFILE
#if RESIZABLE_CYCLIC_BUFFER
#if HAS_READERWRITERLOCK
#if HAS_READERWRITERLOCKSLIM
对条件编译不太懂,有没有解释下都是什么意思?或者给个文档解释的链接地址,我自己去看。
谢谢。
------解决方案--------------------
项目属性啊。我说了多次了。
------解决方案--------------------C# 好像没有任何预定义任何Conditional compilation symbol
------解决方案--------------------楼主钻牛角尖了,那个是条件编译,也就是说,写代码的时候把所有条件对应的代码都写上去,但是实际项目编译的时候只有满足条件的部分而不是全部代码才会参与编译,如果你找不到对应的名称定义,那就代表了那部分#if作用范围内部的代码都不会参与编译,实际也你可以看到Visual Studio里面那部分代码是灰色的,不起作用。那么何时起作用?只要你自己在项目属性里面把#if 后面的条件编译符号填写进去,那部分代码就生效了,但是最好别自己乱改,你不清楚它的逻辑的情况下,随便修改条件编译符号可能会让代码冲突。
例如:
#if CSHARP30
public IEnumerable<TReturn> Read<TFirst, TSecond, TThird, TFourth, TReturn>(Func<TFirst, TSecond, TThird, TFourth, TReturn> func, string splitOn)
#else
public IEnumerable<TReturn> Read<TFirst, TSecond, TThird, TFourth, TReturn>(Func<TFirst, TSecond, TThird, TFourth, TReturn> func, string splitOn = "id")
#endif
{
return MultiReadInternal<TFirst, TSecond, TThird, TFourth, DontMap, TReturn>(func, splitOn);
}
这是我自己写的代码,意思是如果定义了条件编译符号CSHARP30,