【问题标题】:ASP.NET Ahead of Time CompilationASP.NET 提前编译
【发布时间】:2009-12-13 19:42:24
【问题描述】:

.NET 本身是否支持提前编译?我看到 Mono 这样做是为了避免其他平台(例如 iPhone)上的 JITing 问题,并且想知道是否可以将 dll 构建为本机代码并在 IIS 中运行它们。对于开发人员,我真的很希望能够在 VS 和 IIS 上打开开关,所以我只需要等待一次编译而不是编译等待,JIT 等待。

【问题讨论】:

  • 提前开发编译也很酷!

标签: c# .net asp.net compiler-construction


【解决方案1】:

Web Deployment Projects 可以在构建过程中运行上述预编译器 (aspnet_compiler.exe)。

预编译器负责解析 .aspx、.ascx、.master 文件并将解析器生成的代码编译成程序集。这些程序集在站点执行时仍然需要 JITed。从理论上讲,这是 NGen 可能有用的地方,但我从未将它用于服务器端代码(经验法则表明 JITing 更适合长时间运行的应用程序)。

我有一个old article on the aspnet_compiler here

【讨论】:

  • 我将不得不研究 Web 部署项目。
  • 理论上,也许我可以在 Web 部署项目和使用 Ngen 的后期构建步骤之间拼凑一些东西。
  • +1 用于 Web 部署项目。 @Trent:不幸的是,您不能在网站上使用 NGEN。
【解决方案2】:

您可以预编译为 IL,但不能预编译为本机代码; NGEN 与网站不兼容,因为它们被加载到 IIS 中。

除了可以让您将整个站点合并到一个 DLL 中的 Web 部署项目之外,您还可以使用使用客户端编译的“Web 应用程序”项目,而不是“网站”项目,服务器端编译。

【讨论】:

【解决方案3】:

关于您可能到达的最近的位置是使用ASP.NET compilation tool。你也可以看看 NGEN。

【讨论】:

    【解决方案4】:

    查看 -u 选项:

    -u

    来自http://msdn.microsoft.com/en-us/library/ms229863%28VS.80%29.aspx

    “指定 Aspnet_compiler.exe 应该创建一个预编译的应用程序,允许后续更新 .aspx 页面等内容。

    如果省略此选项,则生成的应用程序仅包含已编译的文件,并且无法在部署服务器上更新。您只能通过更改源标记文件并重新编译来更新应用程序。”

    【讨论】:

      【解决方案5】:

      请注意,使用 ngen 可为给定机器指令集(运行应用程序的指令集)的特定框架版本构建应用程序的本机代码版本。安装新版本的框架或更改硬件意味着您需要重新生成原生版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-02
        • 1970-01-01
        • 1970-01-01
        • 2018-02-07
        • 2017-03-10
        • 2015-12-15
        • 2012-04-07
        • 1970-01-01
        相关资源
        最近更新 更多