2011-03-16 68 views
2

我有幾個項目和幾個開發人員的解決方案,每個都有自己的環境(當然)。爲了管理每個環境之間的連接字符串,我爲每個環境創建了幾個app.config文件:app.config.dev,app.config.qa等。App.Config預構建事件後忽略

預生成事件只需複製app.config。 $(ConfigurationName)到app.config。此預生成事件是針對解決方案中的每個項目完成的,每個項目(包括測試項目)中都包含連接字符串。

當我使用預生成事件來管理app.config文件時,無法找到連接字符串。我可以通過2種方法讓測試運行良好:1.不要使用預生成事件來管理app.config文件選擇,並且自己或者2。如果我檢出app.config並使其可寫,那麼預生成事件就可以正常工作。

我們正在使用Visual Studio 2008和VSS。

我倒在我最後的灰色頭髮這裏,有什麼想法嗎? 在此先感謝!

SOLUTION 更新的預生成事件,以確保app.config文件,甚至如果在檢查寫入預生成事件下面使用:
@echo off

attrib -r $(ProjectDir)app.config
if errorlevel 1 goto AttribFailed

copy $(ProjectDir)app.config.$(ConfigurationName) $(ProjectDir)app.config
goto BuildOK

:AttribFailed
echo Attrib -r Failed on $(ProjectDir)app.config
exit 1

:BuildOK
echo Copy Done

回答

1

這聽起來像你的app.config不應該是源代碼控制 - 只是構建配置特定的配置文件(的app.config。 dev,app.config.qa等)。

話雖如此,您可以使簽入的文件在VSS下可寫。例如,通過Windows資源管理器,取消選中該文件的「只讀」屬性。 (每次檢入時都必須執行此操作。)

+0

如果app.config不在解決方案中,也不在源代碼控制之下,那麼在構建應用程序時不會使用它,並且我無法訪問配置字符串。我將嘗試在構建事件之前將其寫入,而不檢查文件。 – 2011-03-16 15:56:31

+0

更新了Pre-Build事件以使文件可寫。謝謝@HansPassant的建議。 – 2011-03-16 16:18:02

1

離開簽入的.config文件有一個副作用,文件保持爲只讀狀態。這有一個副作用,您不能將文件複製到只讀文件,並且無法刪除它。這對解釋爲什麼你無法完成工作有很大的幫助。

+0

檢入文件不必是隻讀的。 – 2011-03-16 01:44:10

+0

更好的做法是在後期構建事件中使用attrib.exe + r寫入副本。 – 2011-03-16 02:04:38

+0

我試過那個Hans – 2011-03-16 15:59:01