我正在开发一个网站,希望使用就地编译来加快首次加载速度。我想使用ClientBuildManager
.CompileFile
方法进行就地编译,以便我能够控制编译过程。由于种种原因,这是编译该网站的理想方式。
为什么IIS在“Temporary ASP.NET Files”下构建到不同的子目录中?
当我使用专门构建的exe文件通过ClientBuildManager
.CompileFile
方法逐个文件对网站进行编译时,输出结果会保存到“Temporary ASP.NET Files”下的一个子目录中。但是,当稍后访问该网站时,IIS会将控件重新构建到“Temporary ASP.NET Files”下的另一个子目录中,使得之前的就地编译变得毫无用处。
注意:在“Temporary ASP.NET Files”下进行就地编译时创建的程序集将保留(仍存在)
注意:就地编译程序集文件夹和IIS生成的程序集文件夹都在同一个“Temporary ASP.NET Files”目录下。
示例:
- C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\2ba591b9\[就地编译文件夹名称]
- C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\2ba591b9\[网站生成的IIS程序集]\
ClientBuildManager
.CompileFile
配置
var buildParameter = new ClientBuildManagerParameter
{
PrecompilationFlags = PrecompilationFlags.Default,
};
var clientBuildManager = new ClientBuildManager(
RootVirtualPath, RootPhysicalPath, null, buildParameter);
...
clientBuildManager.CompileFile(relativeVirtualPath, callback);
其中RootVirtualPath
对于默认网站来说只是一个空字符串。 RootPhysicalPath
指向网站在磁盘上的位置。 relativeVirtualPath
的格式为"~/myFile.aspx"。回调函数用于跟踪进度。
PrecompileApplication
而不是CompileFile
,使用此代码,它们也不会最终位于同一个文件夹中。我已经有一段时间没有查看过这些内容,因此可能需要深入挖掘源代码。 - David Ebbo