磨刀不誤砍柴工——VS生成事件

dong.net發表於2013-11-05

  如果說磨刀不誤砍柴工,同樣用好Visual Studio,會大大增加我們.NET程式猿效率。本文說的就是Visual Studio中的生成事件,在解決方案下右擊某個專案然後選擇 “屬性” 開啟視窗後即可看到 “生成事件” 選項,這個東西其實並不常用,甚至寫幾年程式碼都不會碰它一次,但是我今天需要她了。

 

2014.10.23更新:記得使用的時候有些目錄可能無法寫入,以管理員身份執行Visual Studio,並確認寫入到的目錄的許可權問題。


  我有一個解決方案IdleTest,還有另一個解決方案下的專案需用到IdleTest最新的dll,而原IdleTest下生成的dll由於還有其他專案也在用,故需要將IdleTest解決方案的幾個專案生成的dll拷貝到一個新的目錄。但是每次修改聲稱拷貝很麻煩,於是乎就想到了生成事件,百度說生成事件裡的命令列是支援dos命令的,我就嘗試了在後期生成事件命令列中輸入 “copy [原始檔全路徑] 拷貝到的路徑”,果然奏效。
  但是我需要將多個專案生成的dll都拷貝到新的路徑下,這樣一來這個“[原始檔全路徑]”就顯得很麻煩,沒有體現複用性,有木有更好的辦法呢?
開啟生成事件中的巨集如下圖所示


  可以看到有一個列表(含有“巨集”和“值”列),而“巨集”下的“TargetPath”對應的值就是當前專案生成的 dll/exe 檔案對應的物理路徑,雙擊該行,在上方的方框中就出現了“$(TargetPath)”,好了不羅嗦了。
  直接在每個專案的生成事件視窗中的“後期生成事件命令列”寫下“copy $(TargetPath) E:\projects\MyDemo\JoeyLibs\IdleTest\dlls”,並在下方的 “執行後期生成事件” 選擇 “成功生成時” 搞定。

這個功能我還用來幹一件事,就是當解決方案下又數十個專案時,我會在生成的最後一個專案(一般是UI或者服務)用到,操作與上文類似,只是命令變成了:

@echo msgbox "[$(ProjectName)]生成已完成!">msg.vbs 
@msg.vbs
@del msg.vbs

 

這樣在緩慢的專案生成過程中就可以1024,生成完成又可以馬上繼續coding。

關於生成事件目前我只用到這兩點,如果你有更好的使用場景不妨分享下。

相關文章