为了评估性能指标,我想统计一下asp.net网站项目编译成MSIL代码的频率。正如本文When does an ASP.NET Website project recompile?中所述,有几件事可以触发重新编译。
我对应用程序池重启不感兴趣,除非它们导致重新编译。
一种可能是监视临时文件夹以进行编译。如果我删除%FrameworkInstallLocation%\ Temporary ASP.NET Files的内容,我可以看到当我访问网站时,从运行时编译创建了新的带时间戳的文件。但是,我不了解子目录的布局。
跟踪,记录或以其他方式检测ASP.NET网站项目何时执行自动动态重新编译有哪些可能性?
答案 0 :(得分:0)
您可以创建自定义IAssemblyPostProcessor
并使用web.config的编译部分的assemblyPostProcessorType
属性进行注册。
示例:
public class LoggingPostProcessor : IAssemblyPostProcessor
{
public void PostProcessAssembly(String path)
{
Trace.Write(String.Format("Processing assembly : {0}", path));
}
public void Dispose()
{ }
}
并在web.config中注册,如下所示:
<system.web>
<!-- ... -->
<compilation debug="true" targetFramework="4.5"
assemblyPostProcessorType="ns.LoggingPostProcessor, assemblyName" />
</system.web>
但ASP.net不会将应用程序编译成单个程序集,每次ASP.net编译程序集时都会调用IAssemblyPostProcessor
。
如果您只想拦截某些资源的编译,可以创建自定义BuildProvider
,但可能需要更多工作。