Dot-Net
如何讓 MSBuild 在建構伺服器上增加 ClickOnce 發布修訂版本號?
我們有一個NAnt腳本,它從CVS中籤出,然後執行MSBuild來發布應用程序。問題是我們必須記住始終在 Visual Studio 中增加版本。
我們可以選擇在發佈時自動增加它,但這會在下一次結帳時被清除,我寧願不必讓建構腳本簽入項目文件。
有沒有一種簡單的方法可以做到這一點?
最後,我使用 NAnt xmlpoke 完成了此操作,因此對於我們最終得到 20.0.dayofyear.hourminute 的版本 - 它在建構中大多是獨一無二的。
不需要自定義任務 - 較新版本的 MSBuild 也有一個 pokexml,因此它可能適用。
<target name="pokerevision" depends="init"> <property name="projectname" value="MyProject.GUI" /> <!-- This is a bit flawed because 231 could mean 02:31 or 23:01, but we never build before 3 am. --> <property name="app.revision" value="${datetime::get-hour(datetime::now())}${datetime::get-minute(datetime::now())}" /> <echo message="revision: ${app.revision}" /> <xmlpoke file="${Solution.Path}\${projectname}\${projectname}.csproj" xpath="//x:Project/x:PropertyGroup[1]/x:ApplicationRevision" value="${app.revision}" > <namespaces> <namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" /> </namespaces> </xmlpoke> <property name="app.version" value="20.0.${datetime::get-day-of-year(datetime::now())}.${app.revision}" /> <echo message="version: ${app.version}" /> <xmlpoke file="${Solution.Path}\${projectname}\${projectname}.csproj" xpath="//x:Project/x:PropertyGroup[1]/x:ApplicationVersion" value="${app.version}" > <namespaces> <namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" /> </namespaces> </xmlpoke> </target>
MinimumRequiredVersion自動更新項目編輯器簡介
- 在解決方案資源管理器中,右鍵點擊您的項目並選擇解除安裝項目。
2. 一旦項目變得不可用,再次右鍵點擊並選擇編輯項目*
<project_name>.<lang>*。
MSBuild 簡介
- 屬性使用鍵/值對來提取資訊
- 使用屬性名作為別名,可以
$(OutputPath)用來獲取元素的值<OutputPath>.\bin</OutputPath>
- 我們將使用為 ClickOnce 部署生成的以下屬性
<MinimumRequiredVersion>1.0.0.6</MinimumRequiredVersion> <ApplicationRevision>7</ApplicationRevision> <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
MSBuild Tasks可以在項目 (*.proj) 文件中指定並在建構事件期間呼叫。
FormatVersion是 .NET 4.0 及更高版本的內置任務,它將 ApplicationVersion 和 ApplicationRevision 格式化為單個版本號。執行
- 將以下程式碼複製並粘貼到打開的項目文件中,作為根元素的子
<Project>元素。<Target Name="AutoSetMinimumRequiredVersion" BeforeTargets="GenerateDeploymentManifest"> <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)"> <Output PropertyName="MinimumRequiredVersion" TaskParameter="OutputVersion" /> </FormatVersion> <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)"> <Output PropertyName="_DeploymentBuiltMinimumRequiredVersion" TaskParameter="OutputVersion" /> </FormatVersion> </Target>此程式碼將 ApplicationVersion 和 ApplicationRevision 作為 Format Version 任務中的參數,並將通過使用完整髮布版本覆蓋 MinimumRequiredVersion 來保存輸出。 7. 保存並重新載入您的項目。現在,每個 ClickOnce 部署都將自動更新到最近發布的版本。
*非常感謝 Kev的回答,我基本上在這裡重新討論過,並為任何初學者添加了一點說明。*這是我就這個問題發表的一篇博文,在此處進一步擴展了我的答案。
2. 一旦項目變得不可用,再次右鍵點擊並選擇編輯項目*