如何判断代码是否从Visual Studio/Cassini本地运行

McG*_*gle 6 c# iis wcf compiler-directives visual-studio

我有一个接口,让我们称之为ILocateLogFiledev/beta/production服务器的标准实现,以及仅在本地开发环境中工作的接口.如果我在本地或在服务器上运行,我似乎无法想出一个很好的干净方式来决定(最好是在编译时,但运行时会没问题).如果这很重要,这是在IIS上托管的WCF应用程序.

我提出的最好的是使用编译器符号,如:

    ILocateLogFile locateLogFile;
#if DEBUG
    locateLogFile = new DevSandboxLogFileLocator();
#else
    locateLogFile = new LogFileLocator();
#endif
Run Code Online (Sandbox Code Playgroud)

问题是,编译符号由构建设置,我无法控制,我想确定.是否有一些自动方法来检查Visual Studio的存在?或者至少检查一下卡西尼而不是IIS?

jst*_*ick 8

我这样做的两种方法1你可以检查进程名称

bool isRunningInIisExpress = Process.GetCurrentProcess()
                                .ProcessName.ToLower().Contains("iisexpress");
Run Code Online (Sandbox Code Playgroud)

或者使用自定义设置更新配置文件

<appSettings>
    <add key="ApplicationEnvironment" value="LOCAL_DEV" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)

您为每个环境专门更新并为您提供应用程序查询

我不确定是否有一种方法可以在编译时确定这一点,除了为每个环境提供特殊的构建配置并PRAGMA为每个构建定制一个自定义.我个人认为这不是那么优雅,但它也可以起作用.