概述
Visual studio 項目允許在項目屬性生成事件一欄中指定預先生成和后期生成事件來實現項目生成與部署的自動化。
實例1:
我自己寫了一個調試工具,該工具處於一邊開發一邊使用過程中。實際工作中可能時不時的我會遇到一些新的特性需求想要加到該工具類庫中,每次開發到一個穩定版本我會發布到我的部署目錄下。我希望我項目生成的文件自動copy到某個特定的部署目錄中,因此可以通過制定以下后期生成事件實現:
if $(Configuration)==Release ( xcopy $(ProjectDir)$(OutDir)*.* C:\SeeSharp\JXInst\SeeSharpTools\Debug\Bin\ /y del C:\SeeSharp\JXInst\SeeSharpTools\Debug\Bin\*.tmp )
- if $(Configuration)==Release表示在正式發布版才執行該操作,我不希望在調試過程生成的版本也被發布到部署目錄下
- (ProjectDir)$(OutDir)*.* 表示項目輸出路徑下生成的所有文件
- C:\SeeSharp\JXInst\SeeSharpTools\Debug\Bin\ 是我的部署路徑
- XCOPY復制組文件
XCOPY與COPY命令類似,也是文件對文件的復制,只是XCOPY命令可以將子目錄的文件一並復制,COPY命令只可以復制某一指定目錄下的文件,無法將子目錄區一並復制。另外應注意的是,XCOPY是外部命令,而COPY為內部命令;
實例2:
程序需要依賴某些配置文件,在編譯生成前使用一個預先生成事件將某路徑下的文件拷貝到輸出路徑下去
if not exist $(ProjectDir)$(OutDir)SystemSettings.ini xcopy $(ProjectDir)Resources\SystemSettings.ini $(ProjectDir)$(OutDir) if not exist "$(ProjectDir)$(OutDir)all product\PXIe7506ProductInfo.csv" copy "$(ProjectDir)Resources\PXIe7506ProductInfo.csv" "$(ProjectDir)$(OutDir)all product\"
- 通過 if not exist 來檢查文件是否存在,如果存在的話就不執行拷貝操作
- 如果路徑中存在空格的話必須要把整條路徑用雙引號括起來,否則會導致生成失敗,錯誤列表提示 命令“balabalabala”已退出,代碼為3(也可能是代碼為4);輸出窗口提示系統找不到指定的路徑
- 需要注意如果路徑中有一些特殊符號的話會導致事件執行失敗,比如某文件夾名字中帶符號&,錯誤列表提示 命令“balabalabala”已退出,代碼為255;輸出窗口提示 此時不應有 &
- 盡量使用XCOPY而不是COPY,XCOPY刻意通過 /y指定在遇到文件夾不存在時直接新建一個,文件存在的情況下直接覆蓋等操作
Reference
Microsoft Ref:預生成事件/生成后事件命令行對話框
Ref:C# XCOPY命令 “預先生成事件命令行”和“后期生成事件命令行”