手上有個Visual Studio方案(.sln)原本使用VSS(Visual Source Safe)進行版控,用Visual Studio 2013開啟移除舊版控設定,想切換Source Control Plug-in想改成TFS,冒出以下訊息:

The active solution or project is controlled by a different souce control plug-in than the one you have selected. If you change the sourcce control plug-in, the active solutoin or project will be closed.

大意是目前的.sln或.csproj中使用了不同的版控套件(即VSS),如果硬要切換,目前的方案及專案會被關閉。廢話,既然想換成TFS,當然要答Yes,但下場就是方案被關閉。重新開啟方案,版控又自動跳回VSS,切到TFS,方案被關閉無從繼續設定,重新開啟方案,版控又自動跳回VSS,切到TFS...  很好,這是鬼打牆吧?

直覺推測,專案或方案裡一定有某處保留了VSS版控設定,Visual Studio在開啟時才會被導引自動切回VSS套件。試著刪除.suo及所有.vsscc檔案但無效,VS仍一口咬定這個專案需搭配VSS服用,一切換到TFS便咬舌自盡。不切換到TFS,即便使用File/Source Control/Change Source Control,所能指定的版控來源還是限定為VSS。

最後,我直接用notepad++開啟.sln檔案,找到以下可疑設定。即使IIS Web Site已從方案移除後,設定仍在,而其中SccProvider指向MSSCII:Microsoft Visual SourceSafe,涉嫌重大。

GlobalSection(SourceCodeControl) = preSolution
    SccNumberOfProjects = 2
    SccWebProject0 = true
    SccProjectUniqueName0 = httq://localhost/WebPart
    SccProjectName0 = \u0022$/Portal/DataExtractor/WebPartWeb\u0022,\u0020UVKLAAAA
    SccLocalPath0 = X:\\TFS\\SPS2007\\WebPart
    SccProvider0 = MSSCCI:Microsoft\u0020Visual\u0020SourceSafe
    SccProjectEnlistmentChoice0 = 2
    SccWebProject1 = true
    SccProjectUniqueName1 = httq://localhost/SSO
    SccProjectName1 = \u0022$/Portal/SSO\u0022,\u0020XDEMAAAA
    SccLocalPath1 = X:\\TFS\\SPS2007\\SSO
    SccProvider1 = MSSCCI:Microsoft\u0020Visual\u0020SourceSafe
    SccProjectEnlistmentChoice1 = 2
EndGlobalSection

手動將以上片段自.sln移除,Visual Studio終於不再強迫我使用VSS,專案得以順利簽入TFS。

感覺不像是正規的操作步驟,但這招的確解決了專案一直被鎖定在VSS的問題。另外,直接修改.sln檔有造成方案毁損的風險,提醒在動手前最好先備份檔案。

[2013-11-29更新]感謝網友鮑承佑補充,有時csproj中的<SccProjectName>, <SccLocalPath>, <SccAuxPath>, <SccProvider>也需一併移除。


Comments

# by 鮑承佑

有時候.csproj檔裡的 <SccProjectName> <SccLocalPath> <SccAuxPath> <SccProvider> 這些tag的內容也要移掉或修改才行,沒辦法,這叫『黨國一家』 :p

# by Jeffrey

to 鮑承佑, 感謝補充,已加入本文。

Post a comment