C# 「預先生成事件命令行」和「後期生成事件命令行」

概述

Visual studio 項目容許在項目屬性生成事件一欄中指定預先生成和後期生成事件來實現項目生成與部署的自動化。windows

實例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:

程序須要依賴某些配置文件,在編譯生成前使用一個預先生成事件將某路徑下的文件拷貝到輸出路徑下去spa

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:預生成事件/生成後事件命令行對話框.net

Microsoft Ref: 如何:指定生成事件 (C#)命令行

Ref:C# XCOPY命令 「預先生成事件命令行」和「後期生成事件命令行」調試

Microsoft Ref:xcopycode

baike.baidu.com Ref:xcopyorm

相關文章
相關標籤/搜索