2008-09-04 65 views

回答

30

我們使用Team Foundation Server的團隊建設和增加了一個塊到TFSBuild.proj的AfterCompile目標觸發的ClickOnce我們的首選版本號發佈:

<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj" 
     Properties="PublishDir=$(OutDir)\myProjectPublish\; 
        ApplicationVersion=$(PublishApplicationVersion); 
        Configuration=$(Configuration);Platform=$(Platform)" 
     Targets="Publish" /> 

通過自定義的MSBuild生成的PublishApplicationVersion變量任務使用TFS Changeset編號,但您可以使用your own custom taskexisting solution從AssemblyInfo文件中獲取版本編號。

這理論上可以在你的項目文件中完成(這只是一個MSBuild腳本),但我建議不要從開發人員機器部署。

我相信其他continuous integration(CI)解決方案可以類似地處理。


編輯:對不起,有你的問題倒退。從ClickOnce版本號到AssemblyInfo文件應該是可行的。我確信MSBuild社區任務(上面的鏈接)有更新AssemblyInfo文件的任務,所以您只需要一個自定義任務即可從ClickOnce配置XML中獲取版本號。

不過,您也可以考慮改變你的錯誤報告,包括ClickOnce的發佈版本太多:

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) 
{ 
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment. 
                 CurrentDeployment.CurrentVersion); 
} 
0

您可能需要創建一段代碼,根據存儲在.csproj文件中的版本號更新AssemblyInfo.cs。 (ClickOnce部署版本存儲在XML標記中。)

然後,您將在執行發佈|發佈構建時更改.csproj文件以運行此位代碼。 MSBuild人員已經在博客中介紹瞭如何在某些構建類型中執行自定義操作;檢查MSBuild team blog

2

步驟:

  1. 使用外部遞增版本號(如果你利用諸如CruiseControl.NET持續集成服務器,那麼它來自內部版本標籤)。
  2. 使用GlobalVersionInfo.cs(由解決方案中所有項目引用的文件)來保存當前版本,並使用MSBuild Community任務中的AssemblyInfo任務對其進行更新。
  3. 腳本Mage從.NET SDK命令行工具來更新的ClickOnce清單中,使用相同的版本(見-v-mv開關)。

順便說一句,一個不錯的獎金是,每當你自動通過集成腳本發佈一個更新的ClickOnce部署版本,如果您還指定的最低版本mage.exe(同版),那麼每個用戶將在下次應用程序啓動時自動更新。

4

我實現了這個最近使用一些自定義任務。我發現用ClickOnce實現這個問題是所有的DLL文件都被更新了。這會導致ClickOnce更新在每次更新時下載所有應用程序文件。這繞過了ClickOnce部署的好處,其中只有修改後的文件在更新中被重新下載。

在ClickOnce中實現類似的東西時,需要思考一些問題。