gpt4 book ai didi

c# - 使用 ClientBuildManager.CompileFile 就地编译

转载 作者:可可西里 更新时间:2023-11-01 08:08:20 25 4
gpt4 key购买 nike

我正在开发一个网站,我想在该网站上使用就地编译,以便更快地获得首次点击。我想使用 ClientBuildManager . CompileFile进行就地编译的方法,以便我可以控制编译过程。出于各种原因,这是编译该网站的理想方式。

为什么 IIS 构建到“临时 ASP.NET 文件”下的不同子目录?

当我通过 ClientBuildManager 按文件编译网站文件时. CompileFile为此目的构建的 exe 中的方法,输出转到“临时 ASP.NET 文件”下的子目录。但是,当网站稍后被访问时,IIS 会在“Temporary ASP.NET Files”下的不同子目录下重建控件,使之前的就地编译变得毫无值(value)。

注意:在“临时 ASP.NET 文件”下就地编译期间创建的程序集将单独保留(仍然存在)。

注意:就地编译程序集文件夹和 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”。回调用于跟踪进度。

最佳答案

我认为您所看到的实际上与 CompileFilePrecompileApplication 的使用无关。即,如果您要执行相同的操作但调用 PrecompileApplication(),您仍然会遇到文件夹不匹配的情况。

请注意,从技术上讲,您没有正确创建 CBM 对象。正确的调用方式是依靠 IIS 信息来定位文件。为此:

  • appVirtualDir 传递类似于 /LM/W3SVC/7/ROOT/ 的内容>
  • appPhysicalSourceDir 传递空值

请注意,“7”只是一个示例。要获得正确的数字:

  • 运行 inetmgr
  • 转到网站的高级设置
  • 找到站点 ID。那就是你想要的号码 /LM/W3SVC/ID/ROOT/

我解释这个是为了记录在案,因为不幸的是,即使以这种方式我也无法使文件夹匹配。有可能这种情况只是在 ASP.NET 中被打破(它曾经有效!)。

另一种可能性是在服务器端进行。例如

  • 在您的站点中包含一个页面,您将使用该页面触发选择性预编译。
  • 在那里,调用 BuildManager.GetCompiledType("~/myfile.aspx"),并对您要预编译的每个页面(或用户控件等)进行类似调用。
  • 当您想触发自定义预编译时,只需请求该页面

当然,还有一种低技术含量的替代方法,即只需提前请求您想要编译的页面来预热您的网站。

关于c# - 使用 ClientBuildManager.CompileFile 就地编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15277249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com