文章目錄
關於 Visual Studio 中的外部工具(External Tools)
TDD 第三天課程中,有個重點是使用 Pickles 與 SpecFlow 來產生測試及說明文件,做法就是透過 Visual Studio 來執行外部工具,因為之前沒有使用過 Visual Studio 外部工具的 經驗加上練習時發現有些眉眉角角要注意,順手筆記一下
預設內建工具
- Visual Studio 2015 及之前版本 - Create GUID - 產生 GUID 
- Error Lookup - 從輸入的值取得錯誤訊息 
- PreEmptive Dotfuscator and Analytics >保護 .NET 程式免於反向工程 
- SPY++ 及 SPY++ x64 - 以圖形化方式顯示處理序、執行緒、視窗及視窗訊息 
- WCF Service Configuration Editor - 可用以建立及修改 WCF 服務的組態設定 
  
- Visual Studio 2017 - WCF Service Configuration Editor - 可用以建立及修改 WCF 服務的組態設定  
- 其他工具都不再內建,從 vs_installer 中也沒有選項可以裝回來,以 Create GUID 為例,VS 2017 已排除安裝對應的 guidgen.exe  
 
自訂執行工具
- Visual Studio 主選單 Tools –> External Tools…  
- 填寫自訂工具  - Title - 顯示在選單上的名稱  
- Command - 執行檔案的位置,支援執行檔格式請參照下一節說明 
- Arguments - 執行時需要參數,選擇的參數說明請參照下方章節 
- Initial directory - 指定執行起始資料夾 
- Use Output windows - .exe不支援這個選項 
- 與 - Close on exit互斥,無法同時使用
- 將結果輸出於 Visual Studio Output 視窗中  
 
- Prompt for arguments - 執行時會跳出參數選擇視窗  
- Treat output as Unicode - 將指令執行結果 output 使用 Unicode 編碼
- 需搭配 Use Output windows使用
- .exe不支援這個選項 
 
- Close on exit - 執行結束後關閉
- 與 Use Output windows互斥,無法同時使用
- .exe不支援這個選項 
 
 
支援執行格式
- .exe
- .com
- .pif
- .bat
- .cmd

參數
| 參數 | 說明 | 範例 | 
|---|---|---|
| $(ItemPath) | 目前檔案的完整檔案名稱 (磁碟機 + 路徑 + 檔案名稱) | C:\Projects\TestForWebApi\TestForWebApi\Views\Home\Index.cshtml | 
| $(ItemDir) | 目前檔案的目錄 (磁碟機 + 路徑) | C:\Projects\TestForWebApi\TestForWebApi\Views\Home\ | 
| $(ItemFilename) | 目前檔案的檔案名稱 (檔案名稱) | Index | 
| $(ItemExt) | 目前檔案的副檔名 | .cshtml | 
| $(CurLine) | 程式碼視窗中滑鼠游標目前的行位置 | 10 | 
| $(CurCol) | 程式碼視窗中滑鼠游標目前的資料行位置 | 6 | 
| $(CurText) | 選取的文字 | <hr/> | 
| $(TargetPath) | 要建置之項目的完整檔案名稱 (磁碟機 + 路徑 + 檔案名稱) | C:\Projects\TestForWebApi\TestForWebApi\obj\Debug\TestForWebApi.dll | 
| $(TargetDir) | 要建置之項目的目錄 | "C:\Projects\TestForWebApi\TestForWebApi\obj\Debug\" | 
| $(TargetName) | 要建置之項目的檔案名稱 | TestForWebApi | 
| $(TargetExt) | 要建置之項目的副檔名 | .dll | 
| $(BinDir) | 正在建置之二進位檔的最終位置 (定義為磁碟機 + 路徑) | C:\Projects\TestForWebApi\TestForWebApi\bin\ | 
| $(ProjectDir) | 目前專案的目錄 (磁碟機 + 路徑) | C:\Projects\TestForWebApi\TestForWebApi\ | 
| $(ProjectFileName) | 目前專案的檔案名稱 (磁碟機 + 路徑 + 檔案名稱) | TestForWebApi.csproj | 
| $(SolutionDir) | 目前方案的目錄 (磁碟機 + 路徑) | C:\Projects\TestForWebApi\ | 
| $(SolutionFileName) | 目前方案的檔案名稱 (磁碟機 + 路徑 + 檔案名稱) | TestForWebApi.sln | 
心得
參數不少,光看說明可能不太好理解用途,我的做法是一一將參數輸出來比對,下面提供個人做法
- 方法一:使用指令輸出 - 新增一個 .bat 檔
- echo 參數 - %1…%9 分別代表第一個參數…直到第九個參數
- %0 代表執行檔位置(ex:c:\test.bat)
- %* 所有參數
 
- 搭配 - Use Output windows 
 
- 方法二:使用 - Prompt for arguments- 指定隨意執行檔
- 勾選 Prompt for arguments
- 執行自訂工具時選擇參數即會輸出對應指令及參數
  
- 另外有個小地方提醒一下:參數之間需要用空白符號隔開,否則將會被當做同個參數,會讓實際行為與預期有落差 
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-14
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
 Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。
