2009-01-26 56 views

回答

69

是的,您可以使用配置塊的configSource屬性。所有配置塊都有這個屬性 - 雖然沒有記錄。

this article,在底部一路,附錄B.我還粘貼了以下相關的部分:

附錄B:包括外部配置文件

儘管所有的偉大在.NET 2.0的配置功能中,有一個缺點。在多個環境中處理單個項目時,管理配置可能會變成一場噩夢。在當前工作中管理多個環境配置文件的多個版本(即開發,測試,分期和生產)的過程包括手動比較.config文件,無論何時將更改部署到一個或另一個環境,並進行手動合併過程。我花了好幾個月試圖找到更好的方法,最終找到了一個。輸入其中之一 - 如此受人喜愛的「無證」 - 或者在這種情況下,只是記錄不完善 - 微軟因其出名的特徵而已:configSource。當我使用反射器,精彩的小工具深入研究.NET 2.0配置源代碼時,我只是遇到了這個小小的寶石。

每個配置部分在分析並由.NET配置類加載時都會分配一個SectionInformation對象。 SectionInformation對象包含有關配置部分的元信息,並允許在部分子配置文件(ASP.NET)中定義部分時各部分如何相互覆蓋的某些管理。現在,我們將忽略SectionInformation所提供的大部分內容,並保存ConfigSource屬性。通過將configSource屬性添加到任何ConfigurationSection的根元素,您可以指定將從中加載配置設置的備用外部源。

<!-- SomeProgram.exe.config --> 
<configuration> 
    <connectionStrings configSource="externalConfig/connectionStrings.config"/> 
</configuration> 

<!-- externalConfig/connectionStrings.config --> 
<connectionStrings> 
    <add name="conn" connectionString="blahblah" /> 
</connectionStrings> 

在上面的配置文件,則<connectionStrings>部分已經從一個稱爲externalConfig/connectionStrings.config文件來源。所有應用程序的連接字符串都將從指定的文件中加載。既然連接字符串是從外部資源加載的,那麼在相同的相對位置的每個環境中創建一個connectionStrings.config文件是一件相對簡單的事情。因此,connectionStrings.config路徑的externalConfig/部分。這裏的美妙之處在於我們可以爲每個環境正確定義連接字符串一次。我們不必擔心在配置文件合併不當或完全不合並的部署期間意外覆蓋這些設置。在將應用程序中的更改部署到生產環境中時,這可能是一個巨大的恩惠,在這種環境中,存在正確的數據庫連接字符串至關重要。使用configSource屬性的缺點是需要將所有配置設置放置在外部文件中。沒有繼承或覆蓋是可能的,這在某些情況下使它無用。與configSource屬性一起使用的所有外部配置文件還必須駐留在主文件.config的相對子路徑中。我相信這是關於將文件存儲在Web環境中的相對父路徑中的安全問題。

還有一點要注意的是<appSettings>部分有一個更好的替代使用configSource,稱爲文件。如果使用<appSettings>部分的文件屬性而不是configSource,則可以在根文件.config和參考文件中定義設置。根文件中的設置也可以在參考文件中重寫,只需使用相同的密鑰添加。不幸的是,文件屬性僅在<appSettings>部分可用,並且不在配置框架中。可以在您自己的配置部分中實現類似的屬性。這將在幾個先決條件安裝之後的未來高級配置主題中進行討論;)。

+0

'你可以使用configSection屬性' - 我假設你的意思是*`configSource` *? – Geoff 2016-08-26 14:31:41

相關問題