4

場景
我的項目有一個後期構建階段,用於運行批處理文件,該文件讀取文本文件「version.txt」。該批處理文件使用version.txt中的信息使用this tool將版本塊注入DLL。如何在編輯文本文件時強制構建版本過期?

version.txt包含在我的項目中,以便於修改。它看起來有點像這樣:

@set #Description="TankFace Utility Library" 
@set #FileVersion="0.1.2.0" 
@set #Comments="" 

基本上批處理文件重命名該文件以version.bat,調用它,然後重命名回之後version.txt。

的問題
當我修改version.txt(例如遞增文件版本),然後按F7,構建並沒有被視爲外的日期,所以生成後步驟不執行,所以DLL的版本不會更新。

我真的想包括.txt文件作爲構建的輸入,但沒有任何實際嘗試使用它。

如果我從項目中的CPP文件包含.txt文件,編譯器會失敗,因爲它顯然不理解「@set」的含義。

如果我在@set命令周圍添加/ * ... * /註釋,那麼批處理文件有一些語法錯誤,但最終會成功。但我認爲這是一個糟糕的解決方案。

那麼...你會怎麼做呢?

回答

0

這可能是太「哈克」,但是這可能工作:

  1. 寫Perl的快(等)腳本檢查version.txt已更新。
  2. 如果文件已被修改,請使用此腳本更新與您的項目一起編譯的虛擬源文件。
  3. 將腳本作爲預生成事件運行。

這樣,如果腳本發現文件已經更改,它將更改另一個,這將強制重新構建。

哈克,但嘗試,如果你刮桶的底部。

+0

是的絕對哈克。我不想看看這個文件是否被修改過,我不得不存儲最後使用的文件時間或者其他東西......但是在盒子外面思考的好工作:) – demoncodemonkey

1

這適用於VS2005。如果您沒有使用該功能,某些設置可能位於不同的地方或具有不同的名稱。

將文本文件添加到您的項目中,右鍵單擊它在解決方案資源管理器中並選擇'屬性'。在配置屬性>常規下,確保文件不會從構建中排除。在自定義生成步驟>常規下,將您現有的生成後生成命令作爲命令行設置。確保你指定你的.txt文件作爲輸出文件。現在F7應該更改文本文件並運行批處理文件。

+0

這迫使批處理文件運行每次按F7時,無論version.txt文件是否已被修改。這減慢了我的構建,足以讓我注意到它。你知道我在version.txt被修改時只能運行自定義構建步驟嗎? – demoncodemonkey

+0

嗯,對我也一樣。對於那個很抱歉。不過,我可以通過將.txt文件指定爲輸出文件來修復它。試試嗎? –

+0

好的我已經將.txt文件添加到自定義生成步驟的輸出中。但是現在,無論何時按F7,它都會運行構建步驟,然後修改.txt文件的時間戳,使其每次都運行構建步驟。我確信我在這裏錯過了一些顯而易見的事情......它不可能確實如此艱難?! – demoncodemonkey