【问题标题】:.NET web application automatic update pull-style.NET Web 应用程序自动更新拉式
【发布时间】:2010-07-26 10:35:25
【问题描述】:

我有几个使用类似 cms 框架的 .net Web 应用程序。当我向这个核心框架添加新特性时,我希望每个应用程序都使用这个特性进行更新。所以基本上我需要做以下步骤:

  1. 将 App_Offline.htm 放入应用程序根目录
  2. 从更新服务器复制已更改的文件
  3. 如果需要,运行 SQL 更新脚本
  4. 删除 App_Offline.htm

我了解了 CruiseControl 和其他持续集成工具,它们的功能与我需要的非常相似。问题是他们使用推送式更新,以便集成服务器构建源代码,然后将文件复制到生产服务器。我不能使用这种方法,因为我的客户不能让我访问他们的生产服务器。所以我需要在 IIS 管理器或其他任何地方有一个“更新”按钮,以便客户端可以单击它并从更新服务器中提取数据。有谁知道是否有解决方案来实现这一目标?

谢谢

【问题讨论】:

    标签: .net iis


    【解决方案1】:

    我采用的方法是创建一个脚本,从 git 中提取最新的部署版本,停止 IIS,复制新版本,启动 IIS。它非常粗糙,但如果你的 git 存储库中唯一的东西是最新的可部署版本,它就会工作。

    我什至在 Visual Studio 中设置了发布按钮以复制到我的本地 git 部署存储库。然后我只是从我的开发机器推送,并在我的目标 Web 服务器上运行我的部署脚本,它会提取最新版本。

    您问题的 SQL 更新脚本部分很有趣。听起来您需要类似于 Rails 中的数据库迁移的东西。这不是我必须处理的事情,但我会在这里指出你:http://www.infoq.com/news/2009/01/migrations_dotnet

    【讨论】:

      【解决方案2】:

      我认为这是执行一些步骤的应用程序子系统:

      1. 检查应用程序最新版本的例程
      2. 下载最新的包文件
      3. 解压并复制新文件
      4. 调用sql命令行通知所有sql语句
      5. 最后将所有dll文件复制到bin文件夹

      还有其他方法,但这作为模式安全可靠。

      要从 ASP.NET 中更新 bin 文件夹,您的 IIS 需要允许访问您的 bin 文件夹。因此,您可以考虑通过创建这样的自定义权限集来调整您的环境安全性:

      <IPermission   
      class="FileIOPermission"   
      version="1"   
      Read="$AppDir$"   
      Write="$AppDir$"   
      Append="$AppDir$"   
      PathDiscovery="$AppDir$" /> 
      

      这样您就可以将工作文件复制到这个特殊文件夹中。

      参考文献

      1. http://msdn.microsoft.com/en-us/library/ff649312.aspx
      2. http://msdn.microsoft.com/en-us/library/ms998341.aspx

      ps.:如果您发现 bin 文件夹有问题。将新版本文件复制到 GAC 并将程序集引用管理到 web.config 版本中。听起来也不错。

      【讨论】:

        猜你喜欢
        • 2010-09-08
        • 1970-01-01
        • 2014-06-08
        • 1970-01-01
        • 1970-01-01
        • 2017-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多