我不确定这是否可行,但我希望能找到一条线索来确定当前正在执行的代码是否在 IIS Express 下运行。到目前为止我最好的近似值,这是令人难以置信的 hackish,并且肯定会在某个时候失败/中断:
bool IsExpress =
Request.ServerVariables["SERVER_SOFTWARE"] == "Microsoft-IIS/7.5"
&& Int32.Parse(Request.ServerVariables["INSTANCE_ID"]) > 1000000000;
肯定有更好的方法。我对 Application、Server 和 Request 对象的检查似乎没有揭示任何可能提供更好洞察力的东西。也许我只需要看一些其他物体?
更新:
我真的很好奇是否有一种方法可以检测到这一点 - 在这一点上它真的很学术,我没有迫切需要使用它。原来的问题成立。但本着回应评论的精神,我特别有兴趣回答来自本网站另一个问题/答案的批评:How to search the server's MIME map .批评是发布的答案不适用于 IIS Express,仅适用于传统的 IIS 实例。 IIS Express 将 MIME 配置存储在 applicationhost.config XML 文件中,我想更新该答案以提供一种方法来为 IIS Express 返回该信息。我当然可以只添加一些从 XML 中获取适当值的代码(LINQ to XML Yay!),但我真的想让它更智能。明确地说,我不需要解析该文件的帮助 - 只是尝试检测代码当前是否正在 IIS Express 引擎中执行的更优雅的东西。
更新 2:
IIS 8.0 Express Beta 是 released this week ,它进一步表明我的问题中的方法很脆弱并且会破裂。虽然以特定版本为目标并不会破坏交易,但最好考虑到这一点并尝试确保代码至少适用于当今已知的版本。
最佳答案
检查当前进程名称是否有效?
bool isExpress =
String.Compare(Process.GetCurrentProcess().ProcessName,"iisexpress") == 0;
正常的 IIS 在内存中的 w3wp.exe
下运行。
关于c# - 以编程方式确定代码是否在 IIS Express 下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540437/