我有一个接口,我们称之为ILocateLogFile,带有dev / beta / production服务器的标准实现,以及只能在本地开发环境中工作的接口.如果我在本地或在服务器上运行,我似乎无法想出一个很好的干净方式来决定(最好是在编译时,但运行时会没问题).如果这很重要,这是在IIS上托管的WCF应用程序.
我提出的最好的是使用编译器符号,如:
ILocateLogFile locateLogFile; #if DEBUG locateLogFile = new DevSandBoxLogFileLocator(); #else locateLogFile = new LogFileLocator(); #endif
问题是,编译符号由构建设置,我无法控制,我想确定.是否有一些自动方法来检查Visual Studio的存在?或者至少检查一下卡西尼而不是IIS?
解决方法
我这样做的两种方法1你可以检查进程名称
bool isRunningInIisExpress = Process.GetCurrentProcess() .ProcessName.ToLower().Contains("iisexpress");
<appSettings> <add key="ApplicationEnvironment" value="LOCAL_DEV" /> </appSettings>
您为每个环境专门更新并为您提供应用程序查询
我不确定是否有一种方法可以在编译时确定这一点,除了为每个环境提供特殊的构建配置并为每个构建放置一个自定义PRAGMA.我个人认为这不是那么优雅,但它也可以起作用.