5 个解决方案
#1
你需要条件编译结果的时候,就用了啊?!
你是问条件编译干什么用吗?你同一个文件给silverlight、wpf、winform等使用,并且还考虑Debug和Release等,有90%代码是一样的,但是有不足10%代码一定是条件编译的,例如相同类型的命名空间在不同平台上可能就不同;对于某个功能函数、某些平台可能支持10个不同的强大的重载,而其它平台可能只能支持3个,剩下的需要你自己写;可能有些平台上 Point 数据结构的属性是int,而另外的平台上是Double;你可能在Debug下要去掉“异常保护代码”,等等等等。
你是问条件编译干什么用吗?你同一个文件给silverlight、wpf、winform等使用,并且还考虑Debug和Release等,有90%代码是一样的,但是有不足10%代码一定是条件编译的,例如相同类型的命名空间在不同平台上可能就不同;对于某个功能函数、某些平台可能支持10个不同的强大的重载,而其它平台可能只能支持3个,剩下的需要你自己写;可能有些平台上 Point 数据结构的属性是int,而另外的平台上是Double;你可能在Debug下要去掉“异常保护代码”,等等等等。
#2
比如说你想给A公司编译一个dll,然后给B公司编译另一个dll,所编译的硬编码源代码就是不同的(而不是全都弄一个运行时去判断的复杂、缓慢)。比如你想编译一个用GPU的dll,还想编译一个用CPU的dll,你想在发布前*切换(而不是要求调用者去运行时去判断)。等等等等。
基本上,考虑“变换源代码”代表着经验。而“不变”可能代表着你接触的产品都是刚起步。
基本上,考虑“变换源代码”代表着经验。而“不变”可能代表着你接触的产品都是刚起步。
#3
你看下人家的源代码不就知道了。
比如说,一个程序同时适配linux、windows,显然调用的底层函数不同,就可以用define为不同的编译选项适配不同的代码。
比如说,一个程序同时适配linux、windows,显然调用的底层函数不同,就可以用define为不同的编译选项适配不同的代码。
#4
条件编译嘛~
比如项目引用了一个第三方的dll,这个dll不是独立存在的,是需要主程序初始化的某个值(比如登录人帐号)
生产环境肯定是实际登录的人,张三、李四或者王五了
你在这个项目中使用,登录人肯定是木有的,防止程序报错,可以约定debug(#define Debug)的时候,登录人赋值张三,发布的时候引用dll中的登录人
这样以来,开发完全可以正常进行,发布到生产环境又不用额外的改代码
比如项目引用了一个第三方的dll,这个dll不是独立存在的,是需要主程序初始化的某个值(比如登录人帐号)
生产环境肯定是实际登录的人,张三、李四或者王五了
你在这个项目中使用,登录人肯定是木有的,防止程序报错,可以约定debug(#define Debug)的时候,登录人赋值张三,发布的时候引用dll中的登录人
这样以来,开发完全可以正常进行,发布到生产环境又不用额外的改代码
#5
不说那些高级的,至少在确定哪个代码段合适时就可用到
//#define ABC
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 条件编译
{
class Program
{
static void Main(string[] args)
{
#if ABC
int a = 1;
#else
int a = 2;
#endif
Console.WriteLine(a);
}
}
}
#1
你需要条件编译结果的时候,就用了啊?!
你是问条件编译干什么用吗?你同一个文件给silverlight、wpf、winform等使用,并且还考虑Debug和Release等,有90%代码是一样的,但是有不足10%代码一定是条件编译的,例如相同类型的命名空间在不同平台上可能就不同;对于某个功能函数、某些平台可能支持10个不同的强大的重载,而其它平台可能只能支持3个,剩下的需要你自己写;可能有些平台上 Point 数据结构的属性是int,而另外的平台上是Double;你可能在Debug下要去掉“异常保护代码”,等等等等。
你是问条件编译干什么用吗?你同一个文件给silverlight、wpf、winform等使用,并且还考虑Debug和Release等,有90%代码是一样的,但是有不足10%代码一定是条件编译的,例如相同类型的命名空间在不同平台上可能就不同;对于某个功能函数、某些平台可能支持10个不同的强大的重载,而其它平台可能只能支持3个,剩下的需要你自己写;可能有些平台上 Point 数据结构的属性是int,而另外的平台上是Double;你可能在Debug下要去掉“异常保护代码”,等等等等。
#2
比如说你想给A公司编译一个dll,然后给B公司编译另一个dll,所编译的硬编码源代码就是不同的(而不是全都弄一个运行时去判断的复杂、缓慢)。比如你想编译一个用GPU的dll,还想编译一个用CPU的dll,你想在发布前*切换(而不是要求调用者去运行时去判断)。等等等等。
基本上,考虑“变换源代码”代表着经验。而“不变”可能代表着你接触的产品都是刚起步。
基本上,考虑“变换源代码”代表着经验。而“不变”可能代表着你接触的产品都是刚起步。
#3
你看下人家的源代码不就知道了。
比如说,一个程序同时适配linux、windows,显然调用的底层函数不同,就可以用define为不同的编译选项适配不同的代码。
比如说,一个程序同时适配linux、windows,显然调用的底层函数不同,就可以用define为不同的编译选项适配不同的代码。
#4
条件编译嘛~
比如项目引用了一个第三方的dll,这个dll不是独立存在的,是需要主程序初始化的某个值(比如登录人帐号)
生产环境肯定是实际登录的人,张三、李四或者王五了
你在这个项目中使用,登录人肯定是木有的,防止程序报错,可以约定debug(#define Debug)的时候,登录人赋值张三,发布的时候引用dll中的登录人
这样以来,开发完全可以正常进行,发布到生产环境又不用额外的改代码
比如项目引用了一个第三方的dll,这个dll不是独立存在的,是需要主程序初始化的某个值(比如登录人帐号)
生产环境肯定是实际登录的人,张三、李四或者王五了
你在这个项目中使用,登录人肯定是木有的,防止程序报错,可以约定debug(#define Debug)的时候,登录人赋值张三,发布的时候引用dll中的登录人
这样以来,开发完全可以正常进行,发布到生产环境又不用额外的改代码
#5
不说那些高级的,至少在确定哪个代码段合适时就可用到
//#define ABC
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 条件编译
{
class Program
{
static void Main(string[] args)
{
#if ABC
int a = 1;
#else
int a = 2;
#endif
Console.WriteLine(a);
}
}
}