アプリケーションがビルドされているかどうかをテストできる唯一の方法は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;
}