【问题标题】:ASP.NET pre-compile into a single assemblyASP.NET 预编译成单个程序集
【发布时间】:2011-05-09 15:34:05
【问题描述】:

我有一个 ASP.NET 4.0 Web 应用程序,需要预编译成单个程序集。我已经使用了可用的选项,并且得到了以下结果:

1. 编译时,每个页面都有一个单独的程序集,如下所示:

  1. 当我编译时,我得到一个 Web 应用程序的程序集,但在实时服务器上,每个页面都被动态编译并生成一个临时文件。

  1. 我需要一种方法将我的 Web 应用程序编译成一个允许 UI 更新(HTML 更改而不是代码)并且不会生成临时文件的程序集。

【问题讨论】:

    标签: .net asp.net visual-studio-2010


    【解决方案1】:

    最简单的方法是将您的项目创建(或更改)为(或更改为)“Asp.Net Web 应用程序”而不是“Asp.Net 网站”。

    这将导致您的项目被编译成单个 dll,而不是网站通常使用的“每页 dll”或“每目录 dll”方案。它还将迫使您解决任何类型名称问题(即:如果您有 6 个页面称为 Default),当您制作单个程序集时,完全限定名称是唯一的很重要。

    这将为您提供一个正确的项目文件(构建脚本),并在您编译时将所有 dll 转储到 /bin 文件夹。

    然后,您可以使用 ILMerge 之类的东西将 /bin 文件夹中的所有程序集合并到一个 dll 中(如果您想要这样做的话)。这假设您的所有引用都是托管程序集,如果您有任何非 .Net 库,这将变得更加棘手,尽管并非不可能。

    【讨论】:

    • 这不是他想要的。他想将他的页面预编译成 dll。构建 Web 应用程序不会这样做。
    • @Cipher:显然你错过了我回答中我说使用 ILMerge 组合程序集的部分?
    • 不,我没有错过任何东西。您的回答没有解释如何预编译页面。构建 Web 应用程序只会将基类编译到 Web 项目的 dll 中。呈现页面的实际代码在第一次请求时被编译并存储在他的问题中看到的临时 dll 中。
    • 我建议您尝试一下并发布您的结果。当前加载在我桌面上的 Web 应用程序现在提示其他情况。
    • 对不起,我错过了他真正想要的东西。他不想要预编译的应用程序,而是来自单个程序集的 Web 应用程序。在这种情况下为您的答案 +1。
    【解决方案2】:

    aspnet 编译器包含在框架中。 这是一个描述如何使用它的页面。 http://msdn.microsoft.com/en-us/library/ms227972.aspx

    这里有一些额外的页面供参考:

    【讨论】:

    • 这不会将引用(例如来自 OP 的 elmah.dll)合并到 dll 中。
    • 没错。它不会。其实也解决不了他的问题。 “我需要一种方法将我的 Web 应用程序编译成一个允许 UI 更新(HTML 更改而不是代码)的程序集”在这种情况下是的,建议使用 Web 应用程序。
    【解决方案3】:

    AFAIK 如果服务器不使用临时文件重新编译页面,您将无法更新 UI/html

    所有 .aspx、.ascx 文件等都被转换为源代码然后编译。 ASP.NET 提供的唯一防止这种情况发生的方法是编译页面和控件,但是您的站点不再可更新。在这种情况下,您总是需要为每次更新重新部署二进制文件。

    您不希望 ASP.NET 生成临时文件的任何具体原因?我认为这是一种完全可以接受的做法。

    【讨论】:

    • 我们的网站有 5 种类型的页面,即 TravelWebApp.Country 是一种类型,TravelWebApp.City 是另一种类型。所有国家页面都继承自 TravelWebApp.Country(使用 Page 指令属性)。这使我们可以随时在服务器上创建一个新的国家页面,而无需重新编译。因为我们有超过 500,000 个页面,它会生成大量临时文件,并且当服务器重新启动时,加载站点需要很长时间。
    • @Usman 你的意思是你为每个国家/城市等生成一个.aspx?为什么不将动态位存储在数据库中并重用同一页面?还是我没有正确理解你?
    • 您理解正确。我们正在朝着这个解决方案迈进,但我们的网站很大,需要时间才能到达那里。短期解决方案需要这个。
    • 文件都在一个文件夹里吗?您是否应用了基本的 ASP.NET 性能调整(例如在 web.config 中的编译元素上设置 debug="false")?
    猜你喜欢
    • 2011-03-13
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多