2010-07-26 63 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版本中。聽起來不錯。