ClickOnce發佈時報錯:Cannot publish because a project failed to build

.net程序開發、測試完成後,還有一個很重要的步驟--部署,作爲用戶,自然是希望越傻瓜化、越人性化越好。.net自帶的部署選項有以下幾種:

1、 Xcopy 實用工具

2、Copy Web工具

3、發佈 Web站點

4、部署項目(又分爲四類:創建合併模塊;爲客戶應用程序創建安裝程序;爲 Web 應用程序創建安裝程序; 以及爲基於智能設備(Compact Framework)的應用程序創建安裝程序。還可以創建 cab文件。)

5、 ClickOnce

前四種方式應用很廣泛,本文主要介紹ClickOnce的一次使用過程。

ClickOnce 是一種允許應用程序自動升級的部署技術。應用程序發佈到文件共享、Web站點或 CD 這樣的媒介上。之後, ClickOnce 應用程序就可以自動升級,而無需用戶的干涉。ClickOnce 還解決了安全權限問題。一般情況下,要安裝應用程序,用戶需要有管理權限。而利用 ClickOnce,用戶只要有運行應用程序所需的最低權限,就可以安裝和運行。
首先,我們瞭解一下ClickOnce與普通的windows inStaller程序有何區別:

    ClickOnce Windows Installer
應用程序的安裝位置 ClickOnce 應用程序緩存 Program Files 文件夾 
給多個用戶安裝
安裝共享文件
安裝驅動程序  否 
安裝到 GAC 中   否 
在“啓動”組中添加應用程序  否 
在菜單中添加應用程序  否  
註冊文件類型
訪問註冊表  否。有訪問 HKLM 的 Full Trust 權限
文件的二進制修補
根據需要安裝程序集

在一些情況下,使用 Windows Installer 比較好,但 ClickOnce 也適用於許多應用程序。 ClickOnce 應用程序會顯示在“添加/刪除程序”控制面板選項上,這與其他安裝的應用程序一樣。一個主要區別是用戶可以選擇卸載應用程序或回退到以前的版本。ClickOnce在 ClickOnce 應用程序緩存中保存以前的版本。

關於Winows Installer的使用,本文略過。下面介紹我的一次ClickOnce的部署過程:

1、創建主程序,並測試成功!

邀月工作室

邀月工作室

邀月工作室

2、創建web程序,併發布主程序到web目錄。

web程序的設置,注意部署到IIS中。

邀月工作室

邀月工作室

主程序的發佈選項:
邀月工作室

邀月工作室

邀月工作室

邀月工作室

是否創建一個桌面圖標:
邀月工作室

邀月工作室

邀月工作室

邀月工作室

此時客戶可以從這個地址在線安裝程序了。web程序目錄下生成三個文件:
邀月工作室

邀月工作室

 

3、從指定web路徑安裝程序

邀月工作室
 

邀月工作室
 


 

4、升級安裝程序、回滾安裝程序

首先修改主程序,併發而新版本,如下:
邀月工作室
邀月工作室

發佈後用戶再次運行主程序,或訪問publish.htm時,會收到如下提示:
邀月工作室

升級成功後,界面:
邀月工作室

此時,控制面板,如下:
邀月工作室

此時,選擇“更改/刪除”可以選擇前一個版本或徹底刪除,如果選擇前一個版本,如下:
邀月工作室
邀月工作室

邀月工作室

 

5、問題出現:

在項目-右鍵-屬性-發佈--發佈嚮導時,提示錯誤: Cannot publish because a project failed to build.

奇怪!嘗試解決方法如下:

一、單獨生成項目、重新生成項目、清理項目,刪除所有obj及bin目錄,均試過,可以生成項目,但發佈時出錯,如上提示。

二、懷疑是IIS權限問題,給web項目文件夾network service賬號所有權限。

三、IE-選項-內容中,清除證書。

四、主動修改了一個新版本,仍然出錯。

google成了我的救命稻草,終於找到一條類似的信息,說是用右鍵直接發佈即可。終於成功!如下圖:

不正確的方法:

邀月工作室

正確的方法:
邀月工作室

邀月工作室

六、問題分析:

發佈選項,其實是調用了vs2010自帶的dos命令mage.exe或它的UI程序:mageUI.exe,它主要用來修改相應的application選項。

關於MageUI的說明,請參閱MSDN:http://msdn.microsoft.com/zh-cn/library/xhctdw55%28VS.80%29.aspx

我們可以在程序-Microsoft Visual Studio 2010-Visual Studio Tools-Visual Studio Command Prompt (2010)出現的命令狀態中輸入mageui.exe,得到如下界面:

邀月工作室

其實上面出錯的界面,和成功的兩個界面,應該都是調用Mage.exe或mageUi.exe,只不過可能是調用時參數不一致而導致出錯,這應該是Vs2010 RTM的一個bug。(附:ClickOnce 應用程序有兩個基於XML 的清單文件,其中一個是應用程序的清單,另一個是部署清單。這兩個文件描述了部署應用程序所需的所有信息。應用程序清單包含的應用程序信息有需要的權限、要包括的程序集和其他從屬文件。部署清單包含了應用程序的部署信息。應用程序清單的位置信息包含在部署清單中。)

需要注意:

1、應用程序緩存:用 ClickOnce 發佈的應用程序不能安裝在 Program Files 文件夾中,它們會放在應用程序緩存中,應用程序緩存位於當前用戶的 Document’s and Settings文件夾的 Local Settings子文件夾下。控制部署的這個功能,可以把應用程序的多個版本同時放在客戶機上。如果應用程序設置爲在線運行,就會保留用戶訪問過的每個版本。對於設置爲本地運行的應用程序,會保留當前版本和以前的版本。 所以,把 ClickOnce 應用程序回退到以前的版本是一個非常簡單的過程。如果用戶進入“添加/刪除程序”控制面板選項,所顯示的對話框將允許刪除 ClickOnce 應用程序或回退到以前的版本。管理員可以修改清單文件,使之指向以前的版本。之後,下次用戶啓動應用程序時,會檢查是否更新版本。應用程序不是查找要部署的新程序集,而是恢復以前的版本,但不需要用戶的干涉。這也是ClickOnce部署的一個優勢。

2、ClickOnce可定製的內容還是簡單了點,如果需要更爲精緻的用戶對話界面,還是需要自定義Windows Installer來實現,或通過第三方的InstallShield等專業工具。但它提供了一種界面友好的自我管理機制,幾乎實現了真正的無接觸部署(No Touch Deployment)。

邀月注:本文版權由邀月和博客園共同所有,轉載請註明出處。
助人等於自助!  [email protected]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章