2009-09-04 42 views
5

我們使用Scott Hansleman對其多個web.configs的建議從他的文章here。我們遇到的問題是我們必須檢查Web.Config。如果我們從項目中刪除它,當我們發佈時,不會推送web.config。因此,我們需要從web.config中刪除源代碼控件綁定,但將其留在項目中,並讓項目的其餘部分仍處於源代碼管理之下。TFS 2008,從源代碼管理中刪除文件,但將其保留在項目中

問題是,源代碼管理使文件只讀,直到您簽出。我們需要能夠用預建事件覆蓋它,最好不必檢查它。有沒有辦法只從該文件中刪除綁定,並仍然將其作爲項目的一部分?

謝謝。

回答

8

通過向解決方案資源管理器添加一個新文件,您將得到一個小加號,指示它將被添加到源代碼管理中。然後,右鍵單擊並選擇「撤消掛起的更改」。這將取消添加,但將文件保留在項目中。

如果不工作,我建議以下方法之一:

+0

所以,我需要刪除文件,檢查它,添加一個新的web.config,然後撤消? – Josh 2009-09-04 14:56:01

+0

是的,我建議先從源代碼控制中刪除文件。 – 2009-09-04 14:59:08

+0

不要這樣做。它擊敗了整個觀點。 – 2009-09-04 20:05:36

3

您應該將文件保留在源代碼管理中。否則,您將遇到以下幾個問題:

  • 更改將不會進行版本控制。 'nuf說。
  • 即使web.config是最有可能在並行開發/測試/生產環境之間變化的文件之一,它也不能被分支或合併
  • 您在本地進行的更改不會傳播給沒有手動的同事解決方法
  • 開發人員首次設置環境將無法獲取文件
  • 團隊構建不會包含該文件,因此您的部署也不會。 (當然你不直接從桌面部署?!)

請注意,單個文件的狀態完全存儲在TFS服務器上。 (如果您好奇,'tf properties'會轉儲此元數據)僅限項目&解決方案實際上已將綁定寫入文件。甚至那些虛假的條目告訴VS「不要擔心我,只問TFSProvider,它會知道我是誰,我應該在哪裏。」雖然VS項目系統中存在許多其他的怪癖讓我感到無窮的頭痛,在這種情況下,它是你的朋友。不要規避它。

最佳選擇:

  1. 編輯生成腳本來切換隻讀屬性前/後修改。如果您使用鏈接的博客文章中的「copyifnewer.bat」腳本,它應該是一個額外的行。即使你想讓事情完全在MSBuild的makefile中聲明,在3rd party tasks的幫助下,它幾乎沒有任何工作。

  2. 使用文件 - >源代碼管理 - >排除功能。應用此設置後,該文件仍處於源代碼管理之下,但不再受活動解決方案的自動簽出/簽入的限制。換句話說,你可以在本地編輯文件到你的內容而不影響其他任何人,但是如果你想提交(或擱置)你的更改,你需要從源代碼管理資源管理器或命令行執行它。

選項#1的優點是可以快速修復您現有的設置。不足之處來自維護web.config的多個副本*。複製/粘貼代碼不好的原因相同:如果更改其中一個,則必須更改所有其他副本 - 或者更糟糕的是,忘記並讓它們不同步直到奇怪的錯誤迫使你重新審視這個問題。這可以通過改變進程來改進,以便只有一個「master」web.config,並且其他副本只包含差異(通過文本diff引擎,XSLT轉換,Powershell中的編程操作等)。當然,這是更多的工作。

選項#2避免了#1的問題,而且開銷很小。 (工程過程本身沒有改變;唯一不同的是Visual Studio UI的行爲)如果您經常對web.config進行更改,則此優勢非常關鍵。缺點是沒有內置的方法來跟蹤「主」文件的變化。如果唯一的差異很簡單,例如一個或兩個連接字符串,您可能會發現最簡單的方法就是堅持一個「主」,讓人們在其開發機器上進行臨時更改。甚至有工具可以爲你做這件事,比如Web Deployment Projects(簡單)和IIS Deployment Tool(複雜)。無論如何,當然你的實際部署應該是自動的,並且是源代碼控制的!如果需要比這些工具更強大的自定義功能,那麼您可能需要前面描述的混合主控+變換方法。

+1

我理解你的觀點,理查德,但web.config僅僅是項目中其他4個文件中的一個的副本,它們已經在源代碼控制之下。該文件根據構建配置根據環境簡單地換出。擁有它在TFS中是不必要的,因爲它只是已經受版本控制保護的副本,並且令人頭疼。感謝您的輸入! – Josh 2009-09-14 20:59:45

+0

沒有問題。無論如何,我會檢查選項#2 - 這是那些鮮爲人知的VS功能之一,一旦你知道它,你會發現非常寶貴的 - 即使不是特別針對web.config。 – 2009-09-16 01:54:27

+1

排除不起作用,因爲當我發佈時,不會推送web.config。它必須是項目的一部分,但不是源代碼控制,因此我可以覆蓋它。 – Josh 2009-11-10 16:53:45

相關問題