C# 预编译指令 - 使用变量来告诉编译哪些代码

Posted

技术标签:

【中文标题】C# 预编译指令 - 使用变量来告诉编译哪些代码【英文标题】:C# precompile directive - use a variable to tell which code to compile 【发布时间】:2012-01-07 16:09:31 【问题描述】:

我在 C# 项目中使用 Web 服务。 我在网上和本地主机上测试了这个项目。 我有这样的代码:

 //var proxy = new PanoNestWebsite.ScheduleImagePanonest.ScheduleImageProcessingClient();
 //var s = new ScheduleImagePanonest.ScheduleImageProcessing();
 var proxy = new ScheduleImageLocal.ScheduleImageProcessingClient();
 var s = new ScheduleImageLocal.ScheduleImageProcessing();

例如,如果我想在线部署它,我取消前两行的注释,并注释最后两行。

但我还有更多的更改要做,而且我不喜欢评论和取消评论所有行。 如何使用处理指令来定义一个变量,例如:IsLocal,我只是将其设置为 true 以包含本地代码,或者设置为 false 以包含服务器代码? 我怎么能写出这样的东西?

【问题讨论】:

您可以使用#if preprocessor directive;将您的代码包装在适当的块中。 【参考方案1】:

如果这是您正在处理的那种事情,我会推荐一种替代方法,可能是一些 IOC/DI,其中这两个类都实现了一个接口,并且您在 app.config/web 中进行配置。配置指向它的类型。

所以不是

var proxy = new ScheduleImageLocal.ScheduleImageProcessingClient();

你会这样做

var proxy = IoCFactory.Resolve<IScheduleImagingProcessingClient>();

或类似的东西,但是你的图书馆可以工作。

如果您使用 Unity,您可以将 IScheduleImagingProcessingClient 接口指向配置文件中的具体类型。

【讨论】:

【参考方案2】:

您可以使用项目属性来定义值或#define SOME_KEY 然后:

#if KEY

    ... Code goes here

#endif

【讨论】:

以上是关于C# 预编译指令 - 使用变量来告诉编译哪些代码的主要内容,如果未能解决你的问题,请参考以下文章

预编译指令常见用法

嵌入式软件中预编译指令常见用法

嵌入式软件中预编译指令常见用法

驱动中的宏定义及预编译指令

谁能告诉我预编译gcc -E .c文件,会有如下的信息,前面4行代表啥意思?

简述将源程序编译成可执行程序的过程