您應該將文件保留在源代碼管理中。否則,您將遇到以下幾個問題:
- 更改將不會進行版本控制。 'nuf說。
- 即使web.config是最有可能在並行開發/測試/生產環境之間變化的文件之一,它也不能被分支或合併
- 您在本地進行的更改不會傳播給沒有手動的同事解決方法
- 開發人員首次設置環境將無法獲取文件
- 團隊構建不會包含該文件,因此您的部署也不會。 (當然你不直接從桌面部署?!)
請注意,單個文件的狀態完全存儲在TFS服務器上。 (如果您好奇,'tf properties'會轉儲此元數據)僅限項目&解決方案實際上已將綁定寫入文件。甚至那些虛假的條目告訴VS「不要擔心我,只問TFSProvider,它會知道我是誰,我應該在哪裏。」雖然VS項目系統中存在許多其他的怪癖讓我感到無窮的頭痛,在這種情況下,它是你的朋友。不要規避它。
最佳選擇:
編輯生成腳本來切換隻讀屬性前/後修改。如果您使用鏈接的博客文章中的「copyifnewer.bat」腳本,它應該是一個額外的行。即使你想讓事情完全在MSBuild的makefile中聲明,在3rd party tasks的幫助下,它幾乎沒有任何工作。
使用文件 - >源代碼管理 - >排除功能。應用此設置後,該文件仍處於源代碼管理之下,但不再受活動解決方案的自動簽出/簽入的限制。換句話說,你可以在本地編輯文件到你的內容而不影響其他任何人,但是如果你想提交(或擱置)你的更改,你需要從源代碼管理資源管理器或命令行執行它。
選項#1的優點是可以快速修復您現有的設置。不足之處來自維護web.config的多個副本*。複製/粘貼代碼不好的原因相同:如果更改其中一個,則必須更改所有其他副本 - 或者更糟糕的是,忘記並讓它們不同步直到奇怪的錯誤迫使你重新審視這個問題。這可以通過改變進程來改進,以便只有一個「master」web.config,並且其他副本只包含差異(通過文本diff引擎,XSLT轉換,Powershell中的編程操作等)。當然,這是更多的工作。
選項#2避免了#1的問題,而且開銷很小。 (工程過程本身沒有改變;唯一不同的是Visual Studio UI的行爲)如果您經常對web.config進行更改,則此優勢非常關鍵。缺點是沒有內置的方法來跟蹤「主」文件的變化。如果唯一的差異很簡單,例如一個或兩個連接字符串,您可能會發現最簡單的方法就是堅持一個「主」,讓人們在其開發機器上進行臨時更改。甚至有工具可以爲你做這件事,比如Web Deployment Projects(簡單)和IIS Deployment Tool(複雜)。無論如何,當然你的實際部署應該是自動的,並且是源代碼控制的!如果需要比這些工具更強大的自定義功能,那麼您可能需要前面描述的混合主控+變換方法。
所以,我需要刪除文件,檢查它,添加一個新的web.config,然後撤消? – Josh 2009-09-04 14:56:01
是的,我建議先從源代碼控制中刪除文件。 – 2009-09-04 14:59:08
不要這樣做。它擊敗了整個觀點。 – 2009-09-04 20:05:36