最近因為工作的關係,所以有在開發Web API專案,但由於一開始只是測試性質的開發,所以把專案名稱暫時性命名成’PartnerInternalService1’,後來有一定成果之後,便想要無痛轉換這個專案名稱,但一開始自己小try手動把方案跟專案名稱以及所有Name Space改成自己想要的時(例如:PartnerInternalService),便遭遇到‘ {"名為 'HelpPage_Default' 的路由已經在此路由集合中。路由名稱必須是唯一的。\r\n參數名稱: name"}’的崩潰性問題,差點就可以說被這東西給搞死了。
後來同事教我一個方式”Refactor” 專案,在她那邊可以通過compiler,步驟如下圖:只要在專案的命名空間上用Refactor->Rename改名成自己要的專案名稱就會跳出視窗列出"大部份"用到此命名空間的檔案並問是否要全取代,全選且按下套用便會自動置換所有專案命名空間的名稱。
如此便能自動替換所有命名空間,但是此時再啟動編譯將還是有可能發生錯誤,這些錯誤大多是某些檔案未被列於剛剛的置換清單所以出錯,只要按照錯誤清單的指示找出這些檔案再手動更換即可。
這時候再編譯大概就十拿九穩不會有問題了!可是有一點很重要的是,如果隨意把專案所在的資料夾改變名稱或applicationhost.config中屬於該專案的Port的<Site>內容之physicalPath,將會發生錯誤,例如:
Applicationhost.config
<site name="Trend.API.PIS" id="13">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="D:\Web\PIS_V0.0.0.7_Dev\PartnerInternalService1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:37516:localhost" />
</bindings>
</site>
而專案資料夾名稱改成:D:\Web\PIS\
此時再編譯便會出錯如下:
這主要是因為在啟動IIS Express 8網頁來模擬該專案執行時,VS 會到applicationhost.config(在user\my documents\IISExpress\Config下)中找到該專案的 <site> 從Physicalpath取出專案package的位置,但因為專案資料夾名稱與physical中的名稱不一致,所以會發出找不到package的錯誤。
以下則是另一種錯誤,就是直接改掉Package資料夾名稱,如: D:\Web\PIS_V0.0.0.7_Dev\PartnerInternalService1 改成 D:\Web\PIS_V0.0.0.7_Dev\PartnerInternalService
但PhysicalPath 仍是 D:\Web\PIS_V0.0.0.7_Dev\PartnerInternalService1,此時會出現以下錯誤:
表示專案無法被載入。
另外兩個檔案的資料夾同時改名則會因為一些原因而造成專案有被打開大沒Load進任何東西狀況:
Folder: D:\Web\PIS_V0.0.0.7_Dev\PartnerInternalService
Physical: D:\Web\PIS_V0.0.0.7_Dev\PartnerInternalService
以上是一些Load專案時我最近遇到的一些錯誤,另外還有一些比較奇特的,像是專案的IIS完全無法Launch,或是開啟到別的方案的Global.asax.cs之類的問題,導致路由名稱重複又跑出來的狀況,但這些問題大概都是因為自己不懂亂改專案檔名、web組態或applicationhost.config所造成,一時間也重現不出來,就先紀錄在這邊以茲備查。
2014年6月13日星期五 6:45 AM
留言列表