我有一个库代码,应该知道它是在Web服务器或独立应用程序服务器的上下文中执行的.
想到的显而易见的是检查应用程序配置文件的名称,如果它是web.config - 那么这是一个Web服务器,否则 - 独立的应用程序服务器.
另一种方法是在shadow文件夹的路径中查找类似"Temporary ASP.NET files"的内容.
但我不喜欢这两个,因为它们看起来太脆弱和脆弱.有没有一种强有力的方法来做我想要的?
谢谢.
PS
可以定义一个专用的应用程序配置设置--IsWebServer,但我更不喜欢它.
编辑:
在寻找另一个问题的解决方案时,我想我解决了这个问题 - 细节就在这里
为了解决另一个问题,我找到了一个很好的解决方案.有一种私有方法System.Configuration.SettingsPropertyValue.IsHostedInAspnet,它完全符合我的需要.作为一个私有方法,我不想调用它(虽然我可以使用反射),但它的实现是微不足道的:
private bool IsHostedInAspnet()
{
return (AppDomain.CurrentDomain.GetData(".appDomain") != null);
}
Run Code Online (Sandbox Code Playgroud)
(根据反射器)
看起来应用程序域数据中有一个特殊键 - ".appDomain",它是在ASP.NET Web服务器中运行时设置的.
我会坚持这一点.
你可以检查一下
HttpContext.Current
Run Code Online (Sandbox Code Playgroud)
如果它不为null,则从Web应用程序运行.
最好的选择是配置设置.
它对可测试性更好; 它更好,因为它是代码如何工作的明显陈述,而且它更好,因为它不依赖于实现细节; 你专门从你设置的值分支.您可能正在做出的决定是不明显的,而您的变量/配置可能暗示了推理.
这是我想要的选择.