【问题标题】:How to part Pre-compile a ASP.NET Website如何部分预编译一个 ASP.NET 网站
【发布时间】:2013-01-08 02:25:39
【问题描述】:

我有一个包含大量页面的网站,我在生产服务器上保留了预编译版本(具有固定命名)。

每次我对我的代码进行任何更改时,我都必须发布整个网站,只是为了做一点小改动。

在我可以将更改部署到生产服务器之前,网站发布大约需要一个小时。

有没有办法只发布一批页面,以便发布过程更快?

还有其他节省发布时间的方法吗?

注意:发布是指预编译

欢迎提出任何建议。

【问题讨论】:

  • 您确认这是一个网站?不是网络应用程序?你在修改什么?模板代码(razor、webform)或 c# ?
  • 是的,它是一个使用 3rd 方内容管理系统(Emerge)的网站

标签: asp.net visual-studio web


【解决方案1】:

如果您只修改 html 标签(nto 服务器端标签)或 css,您可以只部署您更改的部分。

如果是编译后的代码,你别无选择。

我想您可能不得不问自己,为什么要花一个小时才能发布您的网站?你的编译时间那么长吗? .

【讨论】:

  • 预编译的 asp.net 不同,所有页面都被放入程序集中,不包含 HTML/CSS/Server 控件的页面占位符被留下:msdn.microsoft.com/en-us/library/399f057w(v=vs.85).aspx
  • 由于使用了第三方内容管理系统,编译后的大小为 800 MB,需要花费大量时间才能发布
【解决方案2】:

减少编译时间和网站项目大小的一种方法是将您的网站拆分为几个更小且更易于维护的网站。

您仍然可以在生产环境中同时部署这些单独的发布。

对来自其他项目的页面的引用完美无缺。 IIS 上同一应用程序中的所有页面都将共享同一个会话。所以对于最终用户来说,这仍然是一个网站。

由于您在发布任何给定模块时减少了要完成的工作,因此发布速度会更快。根据您认为合适的批次划分模块。

您必须意识到这一点,但我会说它只是为了完成。当您发布网站时,您可以选择Use fixed naming and single page assemblies。选择此项可为您的 bin 目录中的每个页面设置不同的 dll。您只需要上传您进行更改的页面和相应的dll。如果上传时间是一个问题,这将解决它。

【讨论】:

  • 感谢您的回复,但将其分成模块不是我的选择,我已经在使用fixed name assemblies
  • 为什么不是一个选项?这是解决问题的最简单方法。
  • 我在网站上使用了一个非常大的第三方工具(大约 500 MB),其中包含很多我无法移动/更改的 ascx 和 aspx 页面,这只会导致预编译耗时任务
【解决方案3】:

如果您注意到您的页面有 3 个组件,即 *.designer、*.aspx *.cs,Microsoft 并没有真正的“预编译”概念。 *.cs 都需要编译成 *.dll 才能部署到您的网站。传统上,有两种类型的可执行文件,exe 和 dll。 Asp.Net 网站被编译成一个 dll,用于在服务器上运行的所有代码背后。微软没有办法“一半”编译一个 dll,然后将它与你没有改变的另一半合并。

如果您的网站需要这么长时间,请编译和部署。我建议你有更多的架构问题而不是代码问题。在我工作的地方,我们的主要网站有 3,000,000 多行代码,用于完成用户需要做的所有事情。我们不需要一个小时来部署。然而,我们所做的是将我们的业务逻辑分解为多个 dll 的 100 多个 dll,而我们的网站项目本身只是 aspx 和背后的基本代码,以驱动流程进入我们的业务逻辑。这允许我们通过更改来更改 x 个 dll 以支持新功能,我们不必每次都部署所有 100 个 dll,而只需部署已更改的那些,这就是 dll 的本质。如果我们的业务逻辑 100% 包含在我们的网站项目中,那么我们的编译、部署将大大延长。

您想考虑将代码重构为 dll。如果您还没有使用 ASPX/ASP.NET 解决方案,另一种选择是考虑使用 ASP/MVC.NET 解决方案。我会考虑重构您的网站。如果花费这么长时间会出现一些严重的问题,即使您可以将数据访问分解为单独的 dll,那么您不必在每次更改网站时不断编译和部署处理数据访问的 dll,只有当您也更改了数据访问层。

【讨论】:

  • 感谢您的详细回答,但在设计网站架构时已经牢记所有这些要点。我的网站包含 2000 多个页面、控件、webpart、小部件。我已经有了单独的 dll 业务逻辑和数据访问层。
【解决方案4】:

正如之前的帖子所提到的,您不能以自动方式执行此操作,但如果您想减少发布时间,您可以手动部署文件。

发布网站时,您网站的所有代码文件都会编译为网站 bin 文件夹中的单个 .dll 文件,并且所有 .aspx 文件都会部署到其相关路径。

要手动更新站点,只需在本地计算机上构建网站以创建更新的 .dll 并覆盖生产服务器上 bin 文件夹中的 .dll。如果源/HTML 已在您的任何实际页面/.aspx 文件上进行了修改,那么您还需要将它们复制过来。

步骤:

  1. 在本地建立网站
  2. 用本地构建的 .dll 覆盖生产服务器 .dll
  3. 将任何 .aspx 页面复制到修改了 HTML/源代码的生产服务器

【讨论】:

  • 这是我的问题,如何减少构建时间?我总是在本地构建站点并将 dll 部署在生产服务器上
  • 在本地构建它肯定不需要几个小时?我的建议是在本地构建它并手动复制所需的文件,而不是使用“发布”方法。
【解决方案5】:

很简单。

将所有 HTML 内容存储在代码的单独文件中。数据库将是一个绝妙的主意。更改某些文本或交换图像所要做的就是进入数据库或文件以获取该内容并更改一些标签。我推荐 MySQL。

:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多