本文筆記使用 Visual Studio 2015 作為專案開發環境 & TortoiseSVN 作為版控軟體的情境下,修改專案名稱且完整轉移更名前專案之 SVN Log 的詳細具體步驟,步驟中有數項是與保留 SVN Log 相關,如無使用 SVN 則可略過。
在前公司工作時,曾聽同事說過這麼一句話:「事不過三,三則重構。」重構的目的,是為了不讓精力再重複花在討厭的事情上。同樣的道理套用到日常的開發,我將之稱為「事不過三,三則筆記。」有些事情就是簡單但瑣碎,不好好紀錄一下,每次遇到的時候都要再被這簡單的事情困擾一次 ─ 例如使用 Visual Studio 開發時更改專案名稱的問題,這個需求基本上不該經常遇到,但人總有手誤且我們都知道開發過程中唯一不變的就是變,有時為了讓專案整體看起來更順眼,還是會有這樣的需求出現。VS 專案在改名稱這件事上確實有點麻煩,因為要顧及的修改點比想像的還多,其中一個地方沒顧到就會讓專案發生令人沮喪的建置失敗。相信許多人跟小弟一樣,經常有想改名稱的念頭,但怕改不乾淨又打消念頭。其實只要成功過一次,有了信心,以後就再也不怕這件事了,所以以下就筆記小弟使用 VS2015 開發 Web MVC 專案時專案更名的具體步驟,由於筆者還有使用 TortoiseSVN 做個人專案的版控,所以也會順道考量 SVN Log 轉移的問題,如果沒有使用 SVN 的話部分步驟便可略過。
在即將進行專案更名之前,強烈建議先把當前可正常運作的專案進行一次備份,用版控軟體或是用最單純的資料夾備份也無所謂,總之要讓自己有個無所畏懼的後盾就是了。
用 VS 打開方案,隨便找一處有欲改名專案 namespace 的地方(找有 using 或找該專案當中的 .cs 檔皆可) 以內建的重新命名功能 (F2 或右鍵 > 重新命名(Rename)) 將 namespace 改為新名稱,關閉 VS。
SVN 使用者:SVN update 後透過 SVN rename (重要!這樣才會保留更名前的 commit log,直接在 Windows 資料夾更名的話,會遺失這些 log) 修改資料夾名稱 & .csproj 檔名,此時更名後的資料夾 & .csproj 檔會是 SVN add 的狀態,原名稱的資料夾 & .csproj 檔會消失並且呈現 SVN delete 狀態。(此步驟是為確保步驟三所使用的實體路徑存在,但步驟二、三交換順序也可,只要在步驟四前完成這兩步就好)
非 SVN 使用者:由於沒有轉移 log 的需求,因此直接在資料夾中修改資料夾名稱 & .csproj 檔名即可。
使用任何文字編輯器打開 .sln 檔,將目標專案的檔案路徑修改為更名後的正確路徑,存檔。(在進行此步驟之前如果就直接用 VS 打開 .sln 檔,會發現更名的專案在方案管理員那邊顯示為讀取失敗,因為 .sln 未更改 VS 就會嘗試從原本舊路徑去讀取專案,結果當然是什麼也找不到)
重啟 VS,此時方案管理器(Solution Explorer)列出的專案名稱應該已被更名 (因修改 .sln 所致)。
以文字編輯器逐一打開有 Reference 到原專案的其它專案 .csproj 檔,在 ProjectReference 節點找到原專案名稱後可修改。(此步驟不影響專案建置與運作,因為 Reference 路徑已在前面修改 .sln 檔的步驟中被自動修改,但由於 Reference 名稱不會被自動修改,顯示在各專案 References 中的仍會是舊名稱,如果看了會乃ㄧㄜˋ就多做這一步吧)
對更名後的專案點右鍵開啟屬性(Properties)視窗,將 Assembly name、Default namespace 以及 Assembly Information 中 Title、Product 欄都手動修改為新名稱。(此步驟目的在於讓此專案往後透過 VS 自動產生的 namespace 和建置產生的 dll 名稱都可以與新名稱一致)
這時候 Error List 視窗可能還是有許多錯誤訊息,找不到 namespace 什麼的,進行以下操作:建置(Build) > 清除方案(Clean Solution) 後再點 建置(Build) > 建置方案(Build Solution)。
此時錯誤訊息應該都消失了,建置也可以通過,但還是建議以原專案名稱做全域搜尋抓一下漏網之魚,因為如 .cshtml 檔中有使用 using 原專案的 namespace 是不會在以上任何步驟中被連動修改的,將會在執行到該頁面才噴錯,噴錯時的 exception 錯誤訊息蠻一目瞭然的,發生錯誤時再回頭修改也並不困難。
SVN commit,會有超乎預期多的檔案需要被提交修改,其中不外乎是被刪除的原檔名資料夾與專案檔案、各處含有被 rename 的 namespace 的 .cs 檔或 .cshtml 檔、各個手動修改的 .csproj 檔和 .sln 檔等等。
照著以上步驟一步一步操作,就不用再為了專案改名而煩心,也不用再擔心改不完全而卻步囉。筆者使用的開發工具仍是 Visaul Studio 2015,不曉得 2017 在這部分是不是已經有做得更方便了,以上分享內容如有誤也請不吝指教!有空再補上圖片 XD