ASP.NET就地预编译无法按预期工作

时间:2014-03-27 17:22:37

标签: asp.net aspnet-compiler pre-compilation

我正在尝试使用ASP.NET预编译工具aspnet_compiler.exe在部署后编译站点。

根据书籍定义,在Web机器上运行就地预编译应该可以改善首页加载体验。编译工具编译每个ASP.NET页面,将编译后的版本存储在%WINDIR%\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files文件夹中,就像第一次从浏览器访问每个页面一样。就地预编译可以加快对站点上新部署的ASP.NET页面的第一个请求,因为它可以减少运行时需要执行此步骤。

由于某些原因,我无法按预期的方式工作。

在Web机器上本地运行aspnet_compiler.exe时:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /7.1 -p C:\MyPathToWebSite\www

创建了以下结构结构的文件夹:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\7.1\640c1f87\4be3507b

当我尝试使用浏览器访问网页时,ASP.NET会在同一服务器上的以下文件夹中创建另一个缓存版本:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\7.1\bc8a1bb3\42b014d4

正如您所看到的,预编译在两种方案(手动和IIS)中都能正常工作,但是由于某种原因,IIS没有看到已经预编译和兑现的页面,并且尝试再次重新编译所有内容。我无法弄清楚丢失或做错了什么,因为aspnet_compiler.exe具有用于就地编译的有限参数选项。

到目前为止,我已经尝试过关于临时ASP.NET缓存的测试/调查:

  • 似乎与用户无关,无论用户手动运行什么
  • 与源/目标IP无关,因为在不同子网中的不同服务器上创建了相同的文件夹

任何想法和帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。仅使用我的网站的配置数据库路径解决了它。

aspnet_compiler.exe -m /LM/W3SVC/[site ID]/root

答案 1 :(得分:-1)

您在第一个文件夹中看到的文件未被jitted。您只将您的站点编译为MSIL,当您第一次访问某个页面时,它会被编译为本机映像代码 - 这些是您在第二个文件夹中看到的文件。 您可能想要使用Ngen - http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.110).aspx