CSharp - 使用 ClientBuildManager.CompileFile 进行编译

  显示原文与译文双语对照的内容
0 0

我在写一个网站,我想把它上使用就地编译为了使第一个命中更快。 我想使用ClientBuildManagerCompileFile方法来为你执行就地编译,这样我有控制编译过程。 虽然由於种种原因,这是理想的方法编译此网站。

为什么IIS Build下到其他Subdirectory " 临时ASP .NET Files "?

当我编译的网站文件按文件通过ClientBuildManagerCompileFileexe中方法用于满足上述要求,则输出将转到下一个Subdirectory " 临时ASP .NET Files " 。 但是,当网站被击中后,iis下重新生成控件用不同的子目录" 临时ASP .NET Files " 呈现上一个在位编译无用。

Note : 在位期间创建的程序集编译下" 临时ASP .NET Files " 将保持不变( 依然存在) 。

Note : 就地编译的程序集文件夹和IIS生成程序集文件夹下相同的" 临时ASP .NET Files " dir 。

例如:

  • c:WindowsMicrosoft .NETFramework64v4 .0 .30319Temporary ASP .NET Filesroot2ba591b9[ 在位编译文件夹名称 ]
  • c:WindowsMicrosoft .NETFramework64v4 .0 .30319Temporary ASP .NET Filesroot2ba591b9[ IIS生成程序集的网站 ]

ClientBuildManagerCompileFileConfiguration

var buildParameter = new ClientBuildManagerParameter
   {
      PrecompilationFlags = PrecompilationFlags.Default,
   };
var clientBuildManager = new ClientBuildManager(
   RootVirtualPath, RootPhysicalPath, null, buildParameter);
...
clientBuildManager.CompileFile(relativeVirtualPath, callback);

其中 RootVirtualPath只是" " 为默认网站。 RootPhysicalPath指向磁盘上的位置的网站。 relativeVirtualPath格式为" ~/myFile aspx " 。 回调用于跟踪进度。

时间:原作者:3个回答

0 0

我认为我们将要看到的实际上是无关的使用 CompileFilevs PrecompileApplication. 我如果不包含。 如果你做了同样的事情呼叫 PrecompileApplication(),或许你获得文件夹不匹配。

请注意,从技术上讲,并不是要创建正确CBM对象。 调用它的的正确方法是依靠IIS信息来定位文件。 可以做到这一点:

  • 传递类似 /LM/W3SVC/7/ROOT/appVirtualDir
  • 传递null作为 appPhysicalSourceDir

请注意,'7'只是一个示例。 获取正确的编号:

  • 运行inetmgr
  • 转到站点的高级设置
  • 找到站点ID 。 这就是所需的数字中 /LM/W3SVC/ID/ROOT/

我解释这个备案,因为不幸的是,即使在这种方式我无法获取文件夹的匹配。 可能是该方案只是在ASP中断开.NET ( 用于啊,混蛋) 。

另一个可能性是做服务器端。 e .g 。

  • 包括页面的网站中在用于触发选择性预编译。
  • 在里面,请调用 BuildManager.GetCompiledType("~/myfile.aspx")以及类似要求每一页( 或用户控制等) 要预编译。
  • 如果要触发自定义预编译,只需请求该页面

当然,还有的低技术替代简单地请求你要访问的网页编译提前热身网站。

原作者:
0 0

山姆,答案是介于David Ebbo是答案,你的原始代码。

var buildParameter = new ClientBuildManagerParameter
   {
      PrecompilationFlags = PrecompilationFlags.Default,
   };
var clientBuildManager = new ClientBuildManager(
   RootVirtualPath, RootPhysicalPath, null, buildParameter);
...
clientBuildManager.CompileFile(relativeVirtualPath, callback);

你照David Ebbo说的并使用此构造时RootVirtualPath ClientBuildManager :

/LM/W3SVC/7/ROOT/

然后要往程序里传入null作为RootPhysicalPath 。

应该摆脱剩余的问题,也应生成到同一个目录IIS在找。

原作者:
...