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# 预编译指令 - 使用变量来告诉编译哪些代码的主要内容,如果未能解决你的问题,请参考以下文章