我正在尋找一個簡單的&優雅的方式來改變我的appsettings
在web.config基於不同的環境,我有(dev/qa/test/stage/prod ),我手動更改appsettings
,它非常繁瑣和耗時,我有大約幾十個設置......對於這種情況,最好的方法是什麼?我知道使用Environment variables
的一個解決方案,但希望聽到最佳做法?更新web.config基於不同的服務器使用asp.net
回答
我更喜歡使用網頁的外部化部分。配置,像這樣:
<appSettings configSource="appsettings.config" />
然後appsettings.config看起來像這樣:
<appSettings>
<add key ...>
</appSettings>
這讓我保存在單獨的文件不改變應用程序的設置,同時還允許我編輯主web.conifig用於實際配置部分。 你可以對其他部分做同樣的事情 - 連接字符串,system.net(用於電子郵件配置)等。
我其實並不認爲VS2010的方式非常好,因爲它需要重新構建才能更改配置。用我的方式,它可以在沒有VS的情況下使用,所以我可以輕鬆修改我所有的環境。
如果可能的話升級你的應用程序ASP.NET 4
這個版本有一個web.config轉換功能,旨在解決正是這個問題:
我通常會執行以下操作:
- 包括多個每個配置值的版本,每個環境一個
- 爲閱讀我的應用程序設置創建一個小類。在這個類中,創建一個檢測當前環境的函數。
- 對於每個設置,創建一個訪問器屬性,該屬性具有一個使用環境檢測功能確定要返回哪個值的開關。
它需要一些初始設置,但一旦配置完成,它將提供一種簡單且無憂的獲取配置值的方法。
如果您使用VS2010(NET工具版本4),那麼您可以進行網絡配置轉換並構建部署包以部署到分段,生產等。不管您的目標版本的asp.net是什麼。然後部署該軟件包和tada,您將在目標上安裝自定義配置文件。無需運行時間來解決它。我一直使用3.5作爲我使用VS2010使用的MSBuild 4的.NET目標版本。我的開發環境具有與我的生產環境和登臺環境不同的應用程序設置。
最終,我建議儘可能使用Visual Studio 2010中的Web.config轉換功能。
如果VS2010不是您的選擇,或者您不想使用配置轉換功能,請查看我剛纔提出的解決方案。它使用批處理文件和NANT腳本的組合來從單個模板和一個或多個替換文件生成配置文件。它幾乎不像Web.config轉換工具那樣強大,但它是一個非常有效的選擇。
http://blog.nathan-taylor.net/2009/10/webconfig-build-manager.html
此前VS2010,我們實際上命名我們web.prod.config,web.qa.config,等等。我想我們有一些偉大的forsight。
無論如何,在VS2008中,我們有一個作爲構建步驟的一部分執行的複製命令會根據我們構建的配置複製相應的配置文件。我們的常規web.config指向dev,我們使用TFS將其部署到其他環境。
我們使用Nant來編寫我們的構建和部署。
Nant會將web.config和app.config模板複製到項目文件期望的位置。與此同時,Nant用適當的QA環境值替換標記。
我知道你已經接受了一個答案,但是我根據不同的環境使用了具有不同配置文件的方法,並且這樣命名。
例如,我有appsettings.config.debug,appsettings.config.deploy,web.config.debug,web.config.deploy。
然後,我有一個預生成腳本運行批處理文件,該文件將與我當前的配置設置相關的配置文件複製到沒有配置設置後綴的文件中。只有在使用FC的文件不同時它纔會執行此操作。
我的預生成事件命令行代碼是:
"$(ProjectDir)copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config"
和
"$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appsettings.config.$(ConfigurationName)" "$(ProjectDir)appsettings.config"
而且我copyifnewer.bat文件是:
echo Config Maintenance
echo Today's date of %date:~-4,4%\%date:~-10,2%\%date:~-7,2%
rem echo Comparing two files: %1 with %2
echo .
if not exist %1 goto File1NotFound
if not exist %2 goto File2NotFound
fc %1 %2
if %ERRORLEVEL%==0 GOTO NoCopy
echo These files are NOT the same. Copying %1 over %2
copy %1 %2 /y & goto END
:NoCopy
echo These files are the same. Nothing copied.
goto END
:File1NotFound
echo %1 not found.
goto END
:File2NotFound
copy %1 %2 /y
goto END
:END
echo Done.
echo .
這對我的偉大工程。希望這可以幫助某人。
感謝, 斯科特
- 1. 更新表基於SQL服務器
- 2. Azure移動服務web.config不會在服務器上更新
- 3. 替代web.config中不同的服務器
- 4. 服務於不同的robots.txt基於HTTP_HOST
- 5. 更新web服務,而不更新的web.config
- 6. 基於xhr的angularjs服務更新
- 7. WEBrick:RequestURITooLarge:我應該更新還是使用不同的服務器?
- 8. 基於UDP的服務器無法區分不同的用戶
- 9. Android的基於定時器的服務更新數據庫
- 10. 基於時間更新不同的行?
- 11. 基於不同列的Mysql更新列
- 12. 基於服務器的散點圖更新
- 13. 基於選擇SQL服務器的更新聲明
- 14. 基於服務器工作更新頁面的Ajax
- 15. 使用ajax更新ASP.NET服務器呈現的控件
- 16. 在基於服務器的代理中使用REST服務
- 17. jQuery Mobile的服務器使用基於登錄REST API服務
- 18. asp.net mvc從服務器更新網頁
- 19. 在VS2012中添加服務引用不會更新web.config
- 20. 如何更新SharePoint服務器場中每個WFE上的web.config?
- 21. 使用基於主鍵的不同數據更新列
- 22. 使用jQuery/ASP.NET更新圖像(runat服務器)源使用jQuery/ASP.NET
- 23. 基於condtion Sql服務器更新了一個表?
- 24. SQL服務器:基於日期和兩個不同的時間
- 25. 在不更新Web.config的情況下添加WCF Web服務
- 26. 如何使用Asp.NET MVC的基於休息的服務Backbone.js 4
- 27. Sql服務器更新不起作用
- 28. 從服務器Vaadin7容器更新 - 要使用服務器推送或不
- 29. SQL服務器:基於
- 30. SQL服務器:基於
我使用VS2010但我們的督促服務器仍然3.5,所以我必須針對3.5框架。 – 2010-12-04 03:51:29
嗯,如果你需要推出你自己的解決方案然後(這是一個很長的一段時間),你可能能夠從NuGet項目拉出web.config變換功能:http://haacked.com/archive/2010/11 /19/nuget-transformation.aspx – rtpHarry 2010-12-04 10:31:20
@rtpHarry,@Chicagoland:您仍然可以在面向.NET 3.5的同時使用web.config轉換。該功能僅需要您使用VS2010。 – 2010-12-09 22:34:00