2010-05-28 56 views
20

由於VS2010的要求web.config包含在項目中,我們如何允許每個人保留自己的自定義配置文件而不會陷入源代碼管理問題?在VS2010和TFS中爲團隊管理web.config

以前,我們只是將web.config放在我們的項目之外,允許每個人在他們的機器上保留自己的web.config版本。我們轉移到VS2010,它現在迫使我添加web.config到我的項目,以運行調試模式。由於我們的項目與TFS相關聯,因此它會自動將web.config添加到源代碼管理並嘗試以此方式進行維護。

有沒有一種方法可以在調試模式下運行,而無需在項目中包含web.config?還是有更好的方法來管理配置文件?

+1

只是好奇,web.config中的哪些信息在開發者之間有所不同? – itchi 2010-05-30 03:55:42

+1

@itchi:從數據庫連接到任何Web服務綁定,應用程序設置,授權等都可能有很多事情......可能是我無法想象的許多事情。 – 2012-06-21 14:11:09

+0

下面是一個快速解決方案(VS中的一步),但它確實將責任交給開發人員來「監視」更改。您可以根據需要將該文件保留在項目中。基本上你告訴TFS不要通過使用「Cloak」來獲取/檢出/檢查此特定文件:http://stackoverflow.com/questions/9741975/how-can-i-always-block-checkin-of-a- specific-file-in-tfs – Jonno 2012-10-03 01:42:13

回答

1

賈勒特,

所有我擁有的是我們如何處理這種情況的軼事。

我們有一個由4名程序員組成的團隊。

我們使用VS - TortoiseSVN之外的源代碼控制解決方案。我們每個人都維護我們自己的本地web.config,它包含在項目中。項目文件包含在存儲庫中,但我們將web.config設置爲「忽略提交」狀態。

我不確定你使用的是什麼源代碼控制,但是使用Tortoise SVN(在Visual Studio之外運行)顛覆了我們的小團隊。我們大多數人在兩臺獨立的機器上進行編程......一個在辦公室,一個在家......所以當你將它與我們有兩臺生產服務器的事實相結合時,我們可以輕鬆處理10個web.config的每個項目。

這樣說的話,你必須記得當你安裝一個新的開發計算機時要帶上另一個開發者的web.config文件,否則解決方案將不能正確加載,或者設置一個默認的web.config,它不包含適當的連接字符串和應用設置。

而且最後要注意的:我們正在使用IIS 7調試

+0

不幸的是,我們在這裏使用的是TFS2010,所以它沒有SVN的靈活性。我希望它具有忽略單個文件的簡單能力。 – Jaeell 2010-06-01 13:10:10

+0

Jarret,我認爲我的建議可能不完全相關,只是認爲我會分享我的經驗 – 2010-06-01 14:34:35

1

SO有這個here一個很好的答案。我還沒有簽出在VS2010多web.configs,但我不知道這是否加入,因爲他們對web所做的更改。

+0

是的,我研究了這一點,而這將工作時,移動到不同的服務器。但是,我不想檢查每個開發人員的web.config版本(以及不得不創建不同的構建配置文件),所以我希望完全避免簽入。 – Jaeell 2010-06-01 13:01:01

1

我已經使用T4模板來解決這個問題。而不是有一個web.config,你有一個web.tt,它會生成一個web.config。在web.tt文件中,您可以根據機器名或當前用戶生成不同的代碼。

+0

我很高興如果你能指出一些資源來做這件事,我聽到很多,但從來沒有用過T4 Templates – TJB 2011-10-21 23:59:08

+0

好好玩,夠公平的。我會看到你的鏈接,並給你一些自動化; )http://letmebingthatforyou.com/?q=t4%20template – TJB 2011-10-24 20:47:33

3

我還沒有看到一個很好的答案,以管理每個開發人員與TFS迄今爲止不同的web.config文件。

但是,如果解決導致開發人員需要不同web.config文件的問題,則無論選擇何種版本控制系統,這通常都會帶來更好的結果。例如,開發人員環境之間差異較小將減少Works On My Machine(WOMM)參數,並且通常還會減少開發之外的環境(例如測試,生產)的配置更改,從而簡化了部署並減少了惱人的環境 - 特定於配置的錯誤。

根據配置項目的性質,通常有幾種不同的策略可以緩解每個環境的差異。其中許多我懷疑已經有堆棧溢出的答案。

+0

我完全同意這裏。 – NotMe 2011-01-28 20:27:08

32

我希望這可以幫助別人。我在過去的幾個月裏已經使用了這種方法。這很容易做到。我使用VS 2010與2010 TFS讓我們來分析一下:

  • 所有的網絡配置文件現在是「DependentOn」中的「web.config」
  • 每個開發者或團隊需要自己的「[用戶/組] .Debug.config「
  • 無論我們是否在發佈模式下」發佈「,配置文件都應該進行轉換。

這裏是它是如何做:

  1. 右鍵單擊要做到這一點,並選擇「卸載項目」(而不是「刪除項目」)的Web項目。

  2. 再次右鍵單擊相同的Web項目(現在應該變爲灰色)並選擇「編輯... csproj」。這將在Xml編輯器中打開該項目。

  3. 向下滾動,直到找到包含所有「Web.config」列表的部分。現在,註釋掉Xml中的所有「DependentUpon」元素。

  4. 關閉Xml編輯器並保存您的更改。接下來,再次右鍵單擊您的項目並選擇「重新加載」。當項目重新加載時,您會注意到Web.config不再在「Web.config」下面「堆疊」。這是爲了「欺騙」TFS所必需的。

  5. 現在,複製「Web.config」文件,將其粘貼到同一個項目中,並將其重命名爲「Web.base.config」。這將用於每次重新生成Web.config(接下來介紹)。

  6. 現在,選擇Web.config文件,然後轉到「文件 - >源代碼管理 - >從源代碼管理中排除Web.config」。此外,打開源代碼管理資源管理器(TFS資源管​​理器視圖)並查找Web.config的位置,並從TFS中將其刪除。這樣做是因爲每次構建項目時都會重新生成Web.config(我將在後面介紹)。

  7. 現在,我們將創建一個新的Build文件,它將幫助我們重新生成任何內置類型的Web.config,甚至是調試類型(這正是Web.config轉換所缺乏的)。在您的項目中創建一個新的Xml文件,並將其重命名爲「[YourProjectName] .wpp.targets」。將名稱命名爲您的項目的名稱非常重要,包括所有點,破折號等(例如My.Project.wpp.targets)。

  8. 現在,將下列Xml輸入到新文件中。如果它開始強調語法錯誤,不要擔心:

    <?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
        <UsingTask TaskName="TransformXml" 
           AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/> 
    
        <!-- Make sure web.config will be there even for package/publish --> 
        <Target Name="CopyWebConfig" BeforeTargets="Build;Rebuild"> 
         <Copy SourceFiles="Web.base.config" 
           DestinationFiles="Web.config" 
           OverwriteReadOnlyFiles="true" 
           SkipUnchangedFiles="false" /> 
        </Target> 
    
        <Target Name="CustomTarget" BeforeTargets="BeforeBuild"> 
         <Message Text="Transforming: Web.$(Configuration).config" Importance="high" /> 
         <TransformXml Source="Web.base.config" 
             Transform="Web.$(Configuration).config" 
             Destination="Web.config" /> 
        </Target> 
    </Project> 
    
  9. 現在,從上,你永遠,永遠編輯Web.config這一點上,它會被覆蓋每一個應用程序編譯時間。您只編輯「Web.base.config」。

  10. 現在讓我們來看看項目的樣子。再次右鍵單擊該項目並「卸載」它。現在,再次右鍵單擊並「編輯」它。現在回過頭去取消我們在步驟#3中註釋過的所有元素。另外,您還應該在「Web.base.config」元素下添加「DependentOn」元素,以便它將顯示在「Web.config」下。關閉並保存它,然後重新加載您的項目。你應該注意到所有的配置現在都在「Web.config」中。

  11. 此時,您可以根據需要爲您的項目/解決方案添加儘可能多的配置。例如,我添加了一個名爲「Tim(Debug)」的構建配置,但項目配置稱爲「Tim.Debug」。當我右擊「Web.config」並選擇「添加配置變換」時,它現在添加了我的「Web.Tim.Debug.config」文件。您還可以爲每個環境或每個團隊添加配置。


值得一提的是您的個性化配置文件只是一個子集「Web.base.config」,並在任何構建過程中,他們將被「轉化」。要在調試過程中切換要構建的Transform,只需轉到解決方案的頂部,然後選擇所需的Build Config。只要您具有該構建配置的web.config,它就會轉變。如果沒有,你會得到「Web.base.config」。

注意:這也應該與標準的Windows/WPF應用程序以及使用「app.config」代替。

+0

這絕對是真棒。如果沒有Web.Configuration.config,我做了一次更改,以免發生錯誤:''。我們應該注意到,每個開發人員都必須在自己的「配置」中進行構建。我希望有一個可靠的方法來在項目中包含一個「machine.config」,而不需要經常試圖檢查它。 – 2012-02-01 03:36:42

+0

+1這正是我想要做自己的方式。所以我搜索了這裏。偉大的工作蒂姆。 – 2012-06-21 14:25:26

+0

**還有一個Q **:因爲您已經使用過這些MS構建目標,所以您可能知道要添加什麼來轉換其他配置文件? Web配置允許appSettings在不同的配置文件中定義,即* appSettings.config *。我們如何將它添加到轉換中(取決於應該手動編輯這些轉換以分層顯示,但這不是問題)。 – 2012-06-21 14:32:00

相關問題