6

我有一个接口,我们称之为它ILocateLogFile,它具有用于开发/测试/生产服务器的标准实现,并且仅适用于本地开发环境。我似乎想不出一种干净的方式来决定(最好在编译时,但运行时会很好)我​​是在本地运行还是在服务器上运行。这是托管在 IIS 上的 WCF 应用程序,如果这很重要的话。

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

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

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

4

3 回答 3

9

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

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

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

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

您专门针对每个环境进行更新并让您的应用程序查询

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

于 2013-05-28T18:07:14.350 回答
0

我在这里找到了它,它对我有用- 确定 ASP.NET 应用程序是否在本地运行

bool isLocal = HttpContext.Current.Request.IsLocal;
于 2019-01-30T19:17:48.643 回答
-2

这是我使用的代码

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
于 2017-03-21T16:17:30.533 回答