2010-07-26 67 views
5

我有几个使用相同类似cms框架的.net Web应用程序。当我向这个核心框架添加新功能时,我希望每个应用程序都使用此功能进行更新。所以基本上我需要做下面的步骤:在应用程序根.NET Web应用程序自动更新拉式

  1. 认沽App_Offline.htm如果需要的话已经从更新服务器改变
  2. 运行SQL更新脚本
  3. 复制文件
  4. 删除App_Offline .htm

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

感谢

回答

0

我采取的方法是创建一个从混帐拉最新版本部署一个脚本,停止IIS,复制新版本上,启动IIS。它非常粗糙,但如果你的git仓库中唯一的东西是最新的可部署版本,它将起作用。

我甚至在Visual Studio中设置发布按钮来复制到我的本地git部署库。然后,我只从我的开发机器上推送,然后在我的目标Web服务器上运行我的部署脚本,该服务器将最新版本拉出。

你的问题的SQL更新脚本部分是有趣的。这听起来像你需要类似于Rails中的数据库迁移。这不是我不得不尚未解决,但我会在这里你指出:http://www.infoq.com/news/2009/01/migrations_dotnet

0

我认为这是应用子系统,其执行一些步骤:

  1. 例行程序检查应用程序最新版本
  2. Perfom下载最新的包文件
  3. 打开包装和复制新文件
  4. 调用SQL命令行,通知所有SQL statments
  5. 最后,复制所有dll文件到bin文件夹

还有其他一些方法,但它的工作方式安全可靠。

要从ASP.NET内更新bin文件夹,您的IIS需要允许访问您的bin文件夹。所以,你可能考虑通过创建自定义的PermissionSet这样的调整环境的安全:

<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版本中。听起来不错。