我有一个接口(interface),我们称其为ILocateLogFile
,它具有针对dev/beta/production服务器的标准实现,并且仅在本地开发环境中有效。我似乎无法想到一种确定(如果最好是在编译时,但运行时会很好)是在本地还是在服务器上运行的干净方法。这很重要,它是IIS上托管的WCF应用程序。
我想出的最好方法是使用编译器符号,例如:
ILocateLogFile locateLogFile;
#if DEBUG
locateLogFile = new DevSandboxLogFileLocator();
#else
locateLogFile = new LogFileLocator();
#endif
问题是,编译符号由build设置,我无法控制,并且我想确定。是否有某种自动的方法来检查Visual Studio的存在?还是至少要检查Cassini而不是IIS?
最佳答案
我执行此操作的两种方法1您可以检查进程名称
bool isRunningInIisExpress = Process.GetCurrentProcess()
.ProcessName.ToLower().Contains("iisexpress");
或使用自定义设置更新您的配置文件
<appSettings>
<add key="ApplicationEnvironment" value="LOCAL_DEV" />
</appSettings>
您专门针对每种环境进行更新,并让您的应用程序查询以下内容:
我不确定是否有一种方法可以在编译时确定这一点,除了具有针对每个环境的特殊构建配置并为每个构建都放置自定义
PRAGMA
之外。我个人认为这不那么优雅,但也可以使用。