我能够测试是否正在构建应用程序的唯一方法aspnet_compiler
是使用以下内容:
HttpRuntime.AppDomainAppId.EndsWith("_precompile")
然而,这感觉就像一个黑客。我可以检查元数据库路径,但是可以通过切换到可执行文件轻松更改。是否有更强大的记录方法来确定这一点?
这是我想出的(尽管它仍然很脏)。如果提供了更好的答案,我将其更改为接受的答案。
public static bool IsPerformingPrecompilation()
{
var simpleApplicationHost = Assembly.GetAssembly(typeof(HostingEnvironment))
.GetType("System.Web.Hosting.SimpleApplicationHost", throwOnError: true, ignoreCase: true);
return HostingEnvironment.InClientBuildManager &&
HostingEnvironment.ApplicationID.EndsWith("_precompile", StringComparison.InvariantCultureIgnoreCase) &&
HostingEnvironment.ApplicationHost.GetType() == simpleApplicationHost;
}