Quantcast
Channel: 黑暗執行緒
Viewing all articles
Browse latest Browse all 2447

【茶包射手日記】在TFS版控解決方案搬移專案資料夾

$
0
0

原本以為是再簡單不過的動作,卻花了兩個多小時。

故事是這樣的,有個Blah.sln,底下有兩個專案Boo.csproj及Shared.csproj,其路徑為

X:\TFS-IM\SNHT\MAIN\src\Blah.sln
X:\TFS-IM\SNHT\MAIN\src\Boo\Boo.csproj
X:\WorkRoom\WTS\Src\Shared\Shared.csproj

其中Shared專案隸屬其他解決方案且由Visual SourceSafe版控,故沒放在一起,而其中只有Boo專案CheckIn TFS,其餘未加入TFS版控。開發一段時間後,決定將Shared專案複製一份到X:\TFS-IM\SNHT\MAIN\src目錄下,於是我用檔案總管將X:\Workroom\WTS\src\Shared複製到X:\TFS-IM\SNHT\MAIN\src\Shared,在Blah.sln中移除Shared專案,重新加入X:\TFS-IM\SNHT\MAIN\src\Shared\Shared.csproj。神奇的事情發生了,VS2012彈出以下訊息:

The project that you are attempting to add to source control may cause other source control users to have difficulty opening this solution or getting newer versions of it. To avoid this problem, add the project from a location below the binding root of the other source controlled projects in the solution.

接著VS2012自動去原來的位置(WorkRoom\WTS目錄)載入Shared.csproj,完全不理會我指定的是TFS-IM路徑搬移後複本,接著,還引導建立額外的Workspace $/SNHT/Main/src/Shared對應:

以為是因為*.scc檔案被一起複製,殘留原本路徑設定造成,便將所有*.scc都刪除(這才知道有些*.scc設定了系統、隱藏、唯讀屬性,要dir /a才看得到,也一併被我殺了),但Visual Studio 2012就是有辦法記得Shared原本來自WorkRoom\WTS目錄。如果故意把WorkRoom\WTS下的Shared.csproj暫時改名,則加入TFS-IM\SNHT的Shared.csproj時會彈出專案檔案遺失錯誤,意思是VS2012堅持WorkRoom\WTS的Shared.csproj才是正宗,絕無分號! orz

修改Shared.csproj中的<ProjectGuid>沒用、出動茶包一哥ProcMon也看不出VS2012如何得知Shared.csproj原有目錄、試著清除TFS的Cache也無濟於事。最後終於試出來: 只要把Shared.csproj更名成其他名字,例如: TempShared.csproj,就不會發生跑回原目錄的狀況。由此推測,VS2012是依據Project檔案名進行比對。

雖然有了更名鋸箭法,還是不太甘心要因此改專案名稱。最後,找到另一個奇妙的解決方法:

  • 先依VS2012的引導加入專案並建立Workspace對應(指向WorkRoom\WTS目錄)
  • 將上圖中Local Folder改到新路徑 X:\TFS-IM\SNHT\MAIN\src\Shared\
  • 此時Shared專案仍指向WorkRoom\WTS,關閉Blah.sln
  • 重新開啟Blah.sln
  • 發現Shared專案已指向X:\TFS-IM\SNHT\MAIN\src\Shared\,而Workspace中的那筆$/SNHT/MAIN/src/Shared也自行消失(猜想是與$/相對路徑一致被判定多餘而移除)

還沒完全解開謎團,但未來再遇到用這兩招頂著先。


Viewing all articles
Browse latest Browse all 2447

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>