這裏的web.config文件和Visual Studio 2010的解決方案:
1)手動編輯你的web應用的.csproj文件,添加一個AfterBuild
目標是這樣的:
<Project>
...
<Target Name="AfterBuild">
<Copy SourceFiles="web.config" DestinationFiles="obj\$(Configuration)\tempweb.config" />
<TransformXml Source="obj\$(Configuration)\tempweb.config"
Transform="web.$(USERNAME).config"
Destination="obj\$(Configuration)\tempweb2.config" />
<ReadLinesFromFile File="obj\$(Configuration)\tempweb2.config"><Output TaskParameter="Lines" ItemName="TransformedWebConfig"/></ReadLinesFromFile>
<ReadLinesFromFile File="web.config"><Output TaskParameter="Lines" ItemName="UnTransformedWebConfig"/></ReadLinesFromFile>
<Copy Condition=" @(UnTransformedWebConfig) != @(TransformedWebConfig) " SourceFiles="obj\$(Configuration)\tempweb2.config" DestinationFiles="web.config" OverwriteReadOnlyFiles="True" />
</Target>
</Project>
這一目標將改造與當前開發者相對應的Web.config文件登錄 - 因此變量爲$(USERNAME)
,並在1)中創建相應的文件。 即使本地Web.config是源代碼控制的,它也會在每次構建內容更改(以避免重新啓動)時替換本地Web.config,這就是爲什麼OverwriteReadOnlyFiles
設置爲True。這一點實際上是有爭議的。
2)爲項目中的每個開發人員創建一個名爲Web.[developer windows login].config
的文件。 (例如,在下面的屏幕截圖我有一個名爲SMO和smo2兩個開發):
這些文件(1每顯影劑)可/應源控制。它們不應該被標記爲依賴主Web.config,因爲我們希望能夠單獨檢查它們。
這個文件的每一個表示一個轉換應用於主Web.Config文件。 轉換語法在這裏描述:Web.config Transformation Syntax for Web Application Project Deployment。我們重複使用Visual Studio提供的這個很酷的Xml文件轉換任務。此任務的目的是合併 Xml元素和屬性,而不是覆蓋整個文件。
例如,下面是一個示例web.[dev login].config
改變命名的連接字符串「MYDB」,無論Web.config文件的其餘部分:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>
</configuration>
現在,這個方案並不完美,因爲:
- 建成後,開發商可能有不同的Web.Config局部比源控制系統
- 他們可能從源頭上控制SYS得到一個新的Web.Config時強制本地寫tem
- 開發人員不應該在主web.config中檢出/。它應該保留給少數人。
但是至少你只需要維護一個獨特的主web.config加上每個開發者一個轉換文件。
對於App.config(不是網頁)文件可以採取類似的方法,但我沒有進一步詳細說明。
我投票重新開放,因爲這是Visual Studio開發人員的常見問題,直接涉及開發人員正在使用的工具。 (因此得票) – 2017-06-09 17:25:02
同意,這是一個長期存在的問題,因爲我們的團隊規模不斷擴大,各種解決方案的嘗試都不盡如人意。 – DiskJunky 2017-10-16 09:24:52