我有一个库代码,应该知道它是在Web服务器或独立应用程序服务器的上下文中执行的.
@H_301_2@想到的显而易见的是检查应用程序配置文件的名称,如果它是web.config – 那么这是一个Web服务器,否则 – 独立的应用程序服务器.@H_502_3@
@H_301_2@另一种方法是在shadow文件夹的路径中查找类似“Temporary ASP.NET files”的内容.@H_502_3@
@H_301_2@但我不喜欢这两个,因为它们看起来太脆弱和脆弱.有没有一种强有力的方法来做我想要的?@H_502_3@
@H_301_2@谢谢.@H_502_3@
@H_301_2@附:@H_502_3@
@H_301_2@可以定义一个专用的应用程序配置设置–IsWebServer,但我更不喜欢它.@H_502_3@
@H_301_2@编辑:@H_502_3@
@H_301_2@在寻找另一个问题的解决方案时,我想我解决了这个 – 细节是here@H_502_3@
解决方法
为了解决另一个问题,我找到了一个很好的解决方案.
有一个私有方法System.Configuration.SettingsPropertyValue.IsHostedInAspnet,它完全符合我的需要.作为一个私有方法,我不想调用它(虽然我可以使用反射),但它的实现是微不足道的:
有一个私有方法System.Configuration.SettingsPropertyValue.IsHostedInAspnet,它完全符合我的需要.作为一个私有方法,我不想调用它(虽然我可以使用反射),但它的实现是微不足道的:
private bool IsHostedInAspnet() { return (AppDomain.CurrentDomain.GetData(".appDomain") != null); }@H_301_2@(根据反射器)@H_502_3@ @H_301_2@看起来应用程序域数据中有一个特殊键 – “.appDomain”,它在ASP.NET Web服务器中运行时设置.@H_502_3@ @H_301_2@我会坚持这一点.@H_502_3@