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

本文关键字:Studio Visual Cassini 运行 是否 何判断 判断 代码 | 更新日期: 2023-09-27 18:15:49

我有一个接口,让我们称之为ILocateLogFile,它具有用于开发/测试/生产服务器的标准实现,并且只能在本地开发环境中工作。我似乎想不出一种干净利落的方法来决定(最好是在编译时,但运行时也可以)我是在本地运行还是在服务器上运行。这是一个托管在IIS上的WCF应用程序。

我想到的最好的方法是使用编译器符号,比如:

    ILocateLogFile locateLogFile;
#if DEBUG
    locateLogFile = new DevSandboxLogFileLocator();
#else
    locateLogFile = new LogFileLocator();
#endif

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

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

我使用了两种方法:1 .检查进程名

bool isRunningInIisExpress = Process.GetCurrentProcess()
                                .ProcessName.ToLower().Contains("iisexpress");

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

<appSettings>
    <add key="ApplicationEnvironment" value="LOCAL_DEV" />
</appSettings>

为每个环境专门更新,并让应用程序查询

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

我在这里找到了这个,它为我工作-确定ASP。. NET应用程序在本地运行

bool isLocal = HttpContext.Current.Request.IsLocal;

下面是我使用的代码

If Debugger.IsAttached Then
 ' Since there is a debugger attached,
 ' assume we are running from the IDE
Else
 ' Assume we aren't running from the IDE
End If