最近因為工作關係,要將個做緊的Project從Web Site Projcet (唔駛compile)變成Web Application Project (WAP, 要compile)。其實,MSDN本身都有Web Site Project轉為Web Application Project的walkthrough,不過下面講的會係concern埋Source Control(用VSS)的問題。
因為根據Guideline,我係要先獨立地起一個新的Web Application Project先,再將Web Site Project D file再clone過去,再行conversion wizard。因此個source control 係convert完之後就因為當個Web Application Project係新Project,而會當D files 係新的,因此舊有的change history就會無左。
為避免這個情況,又唔見有現成的solution,我就唯有自行研究解決方法:
- 於VSS 拿最latest的full source,並確保每一個ASPX 的 code behind及App_Code folder內的class都係belongs to 一個正確的namespace (因為Web Site Project default係不用define namespace),如果不是的話就改到係為止。
- 改完code就 compile行下,看看有無問題。將改好了的file check in。
- 將整個Web Site Project 與及 Solution file check out
- 關閉 VS.net
- Backup整個solution file
- Copy 一整套 solution 到另一個folder
- 用vs.net 開啟copy了出來的那一套solution,於VSS選項內unbind全部Project及solution
- Save and Exit VS.net
- 以Command prompt將Step 7的solution folder入面全部files 的attrib -r -h -s,並delete全部source control file (.scc, .vssscc)及excluded file (.exclude)
- 開返step 6個file,如出dialog問係咪唔做source control的話就選"是"
- 確保個solution去到呢個moment都行得
- 跟MSDN walkthrough做conversion,並確保App_Code folder經以改名,再於solution內delete整個Web Site Projcet。
- 試Build及試行個system,唔得改到得(記得include reference)
- 行得smooth後close個VS.net
- 以Explorer或其他方法,總之就不要在VS.net或VSS內,於有source control的那套solution內,delete Web Site Project 個folder內全部file
- 將Step 13那個solution內的files copy 落於有source control的那套solution內原 Web site project 的那個folder內
- 改Solution file (見下文)
- 以VS.net開啟Merge好後的solution,這時,在solution explorer內該可見到個Web Site已轉了Web App,並可看見新加的designer.cs files
- 試Build及試行個system,唔得改到得(如果Step 13試好的話該無問題,否則可能copy漏file,這時就只好restore backup)
-- Point of no return -- - Check In全部files,並關閉VS.net
- 於VSS內該可看到有不少file個 status 仲係 Check Out,manually remove這些files
- 開返個Merge 好的solution,再get latest並在試Build及試行個system,如果有問題的話好大可能是App Code folder未被delete
- ~完~
改Solution file(.sln)
Solution file 是用作控制一個solution入面D Projects的relationship,setting及source control。
因為Web Site Project無csproj file 去store一些有關它自己的設定,因此我們在轉做Web Application後便要人手改動這個file,去通知個solution個Web Site Project已轉為一個Web Application Project。
建議找一些file comparision tools去幫幫手compare新舊兩邊project 的solution file,可事半工倍
- 1. 第一個difference該是一個以"Project"一字做頭的section,如在行Web Site Application的solution file會見到
Project("{E24C65DC-7377-472B-9ABA-BC803B739999}") = "C:\...\Web\", "Web", "{63B50FD7-F0B7-4E2E-B4C8-B3AD4A3B9999}"
Web Application 的是
Project("{E24C65DC-7377-472B-9ABA-BC803B739999}") = "MyCompany.MyProject.Web", "Web\MyCompany.MyProject.csproj", "{6991311F-FDEA-4F4E-A776-CE835AA59999}"
當要merge這段的時候,要更改"="後的那段string,最後的GUID其實就是Web Project的GUID;
Debug/Release.AspNetCompiler* 的那幾行,新那邊無的話可直接移走舊solution的那幾行 - 第二個difference該是下列的一段
SccWebProject[n] = true
SccProjectUniqueName[n] = Web
SccLocalPath[n] = .
SccProjectFilePathRelativizedFromConnection[n] = Web\\
SccProjectEnlistmentChoice[n] = 2
[n]是一個數字
在舊Solution中可移走下列兩行
SccWebProject[n] = true
SccProjectEnlistmentChoice[n] = 2
並將SccProjectUniqueName 改做跟新Solution file的那個"......Web.csproj" - 第三個difference該是下列的一段
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{63B50FD7-F0B7-4E2E-B4C8-B3AD4A3B9999}.Debug|.NET.ActiveCfg = Debug|.NET
{63B50FD7-F0B7-4E2E-B4C8-B3AD4A3B9999}.Debug|.NET.Build.0 = Debug|.NET
{63B50FD7-F0B7-4E2E-B4C8-B3AD4A3B9999}.Debug|Any CPU.ActiveCfg = Debug|.NET
...
EndGlobalSection
將整段setting由新solution copy 入舊solution - Save
No comments:
Post a Comment