【问题标题】:Incrementally updating a asp.net web site?增量更新 asp.net 网站?
【发布时间】:2011-01-12 02:26:22
【问题描述】:

有没有一种好方法可以在不重新发布整个网站的情况下对 asp.net 网站进行增量更改?

我正在将一个旧网站从经典 asp 迁移到 asp.net,而网站上过去经常发生的事情之一是个别页面被单独更改。该站点仅在单个服务器上,并且有很多文件,因此重新发布会使整个站点停机一段时间。我想避免这种情况,或者至少尽可能缩短这段时间。

每个页面都有一个代码隐藏文件,并且在 App_Code 中每个页面都使用了一些东西(以防万一改变答案)。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    如果您正在构建一个网站(而不是一个 Web 应用程序,其中所有代码都编译到 /bin 文件夹中的 .dll 中),并且听起来像您,那么您确实可以只部署那些具有更改为服务器 - 最多为机器或 web.config 文件的 <compilation> element 中的 numRecompilesBeforeAppRestart 中设置的值 - 默认为 15。

    如果您将更改部署到 /app_code 文件夹,这将导致重新编译站点,因为这是一个共享区域。

    需要指出的一点:在 VS2008 及以下版本中,发布站点命令通常会发布整个站点 - 我相信这在 VS2010 中要好得多,因为它更容易只发布更改的文件 - 所以这需要手册部署更改。

    【讨论】:

      【解决方案2】:

      您可以将 Visual Studio 设置为生成固定的程序集名称。对于每个页面(master、ascx),都会生成一个程序集,并且它始终具有相同的名称。使用此选项,您只能更新已更改的文件。无论如何请记住,此操作容易出错,因为您失去了对程序集交互(如果有)的自动控制,因此如果出现问题,您可能会遇到运行时错误。 最后,如果您有很多页面,此模式的性能会降低。

      http://msdn.microsoft.com/en-us/library/aa992037.aspx

      【讨论】:

        【解决方案3】:

        可以将 Web 应用程序划分为单独的类库。这样,您只需重新编译相关的 DLL 并将其放入已发布的 bin 目录中,而无需发布整个站点。向类库添加版本号将有助于识别它。通过调用这些类库中的方法,尽量减少文件背后的代码。

        【讨论】:

          【解决方案4】:

          为什么不为网站设置多个文档根目录,一个“实时”,一个用于“暂存”。将更改发布到“暂存”区域,检查和测试,然后在 IIS 中切换文档根目录(实时变为暂存,暂存变为实时) - 这应该会在回收应用程序所需的时间内关闭站点游泳池等等。将旧的“实时”更新到新的代码库,并等待下次需要更新。

          【讨论】:

            【解决方案5】:

            默认情况下,当用户第一次请求页面时,ASP.NET 页面和相应的代码隐藏是动态编译的,因此当您只进行几次更新时,您实际上不需要重新发布整个站点。您只能发布这些文件。

            【讨论】:

              【解决方案6】:

              将应用程序划分为多层架构,仅部署更改的程序集。为了识别依赖关系,我们是否应该部署它们引用的库/服务也不取决于兼容性问题。就像我们是否只更改了接口内部代码或者我们是否也更改了方法(接口)的签名...... 一篇不错的文章,详细http://www.codeproject.com/Articles/430014/N-Tier-Architecture-and-Tips#How正确部署N层应用

              嗨, 帕尼

              【讨论】:

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