我目前「自動化構建」我們的.NET解決方案中(其中包含很多項目,至少20.有些的WinForms,一些Web項目,都具有不同的發佈配置...啊!)。我正在使用CruiseControl.NET(或CC.NET,whatevs)和nANT。另外,DOS和PowerShell和其他幾個魔豆,我們不需要進入:)如何將CC.NET自動生成版本信息寫入全局程序集信息文件並由幾個.NET應用程序引用?
我的目標是產生一個內部版本標籤(我已經有BTW半工作)。構建標籤由Min/Maj號碼加上SVN簽入號碼組成。這對我們來說很好,我們對此感到滿意。我現在需要讓我的.NET項目引用內部版本號,以便我的QA團隊成員知道他們正在測試的內部版本號。
我的版本標籤楠任務看起來是這樣的:
<project name="updateassemblyversion" default="updateassemblyversion">
<target name="updateassemblyversion" description="generates the version number">
<echo message="Setting the build version to ${CCNetLabel}..." />
<attrib file="AssemblyInfo.cs" readonly="false" />
<asminfo output="AssemblyInfo.cs" language="CSharp">
<imports>
<import namespace="System" />
<import namespace="System.Reflection" />
</imports>
<attributes>
<attribute type="AssemblyVersionAttribute" value="${CCNetLabel}" />
<attribute type="AssemblyFileVersionAttribute" value="${CCNetLabel}" />
</attributes>
</asminfo>
<attrib file="AssemblyInfo.cs" readonly="true" />
</target>
不管怎麼說,我試圖把我生成服務器上的程序集信息。我已閱讀,它不是最好的做法有20+的AssemblyInfo.cs文件寫入,所以我手動創建一個GlobalyAssemblyInfo.cs文件,因爲這是與我的所有項目「的方案項目」,通過「添加.. .Existing Item ...添加鏈接「。我不認爲這是我將需要,但因爲我的版本將發生在構建服務器上...
這是公平的指出,我目前正在測試的nANT任務(示例上面)使用我需要正確的版本戳記,但該任務對我的場景不正確。它會創建一個新的AssemblyInfo.cs文件,並且版本在編譯完成後貼上它。我知道這是錯誤的,但它本質上是產生我需要的東西,但我不確定如何在我的「構建」腳本中以我需要的順序使用它。我知道它應該在編譯發生之前發生,但是如何讓編譯任務使用新生成的文件? (見問題#4)。
這是我不明白:
- 保持我的老20+的AssemblyInfo.cs文件?他們現在有什麼 的目的?我不需要他們,我做 不相信。我可能不應該 從解決方案中的文件刪除, 但他們是無用的,對不對?
- 如果我確實使用生成的GlobalAssemblyInfo.cs文件,從我的 nANT任務中,我如何獲得 引用併爲我的編譯內容添加版本戳記 ?
- 正在手動創建GlobalAssemblyInfo文件(在我的解決方案中爲 ),並且從每個項目引用它 ,對於我的 情況無效?我想我並不需要在所有在我的解決方案 和 這些文件引用的項目,我只需要它 在我的構建例行我的體型 服務器上。我已經產生 「AssemblyXYZ.cs」文件(從楠) 用正確的版本標記。 不應該我只是用它來編譯我所有的項目 ?
- 如果#3爲真,我該如何在CC.NET配置文件 文件(或nant goodness?)中實現它?基本上, 我該如何告訴VS編譯器在我的解決方案中使用我的新GlobalAssemblyInfo.cs (由nANT生成)所有20+ .NET 項目?
- 如何讓我的.NET項目引用(內部)新生成的 生成的動態生成 number/versionstamp?我需要質量保證是 能夠在應用程序 UI中看到它。
一旦發生這種情況,我將成爲一個快樂的汽車製造商:) 乾杯!
你在哪裏下載NetReflector?該鏈接不再有效:http://sourceforge.net/projects/netreflector/files/ – D3vtr0n 2011-03-23 15:04:55
反射的東西似乎被棄用。我甚至不能進入他們的SVN主幹自己編譯它。有沒有解決這個問題的方法?否則這個例子是相當無用的...任何方式來獲得.DLL? – D3vtr0n 2011-03-23 15:29:22
@Devtron NetReflector是CruiseControl.NET發行版的一部分。您可以在CruiseControl.NET \ server文件夾中找到該dll。 – 2011-03-24 05:23:33