【发布时间】:2013-05-28 17:46:31
【问题描述】:
我有一个接口,我们称之为ILocateLogFile,它具有用于开发/测试版/生产服务器的标准实现,并且仅适用于本地开发环境。我似乎想不出一种干净的方式来决定(最好在编译时,但运行时会很好)我是在本地运行还是在服务器上运行。这是托管在 IIS 上的 WCF 应用程序,如果这很重要的话。
我想出的最好办法是使用编译器符号,例如:
ILocateLogFile locateLogFile;
#if DEBUG
locateLogFile = new DevSandboxLogFileLocator();
#else
locateLogFile = new LogFileLocator();
#endif
问题是,编译符号由构建设置,我无法控制,我想确定。没有一些自动的方法来检查 Visual Studio 的存在吗?或者至少检查 Cassini 而不是 IIS?
【问题讨论】:
-
我之前已经通过在 if else 语句中检查服务器名称变量来解决这个问题。
-
有什么理由不使用 .config 文件来配置日志记录? (可能您已经为每个环境设置了不同的 .config,因此添加日志记录也可能很简单)。
-
@RandomUs1r 这是个好建议,但我不能使用
System.Web.HttpContext,因为我的 WCF 服务没有使用 ASP.Net 兼容性... -
@AlexeiLevenkov 我确实有一个理由,尽管可能不是一个令人信服的理由——我们在本地运行与开发服务器上相同的 .config。
标签: c# wcf visual-studio iis compiler-directives