2009-05-04 97 views
7

我有一個包含Web和Windows NT服務應用程序的解決方案。這些當然是兩個不同的項目,但在同一個解決方案中。然而,他們分享了很多相同的配置。.NET中的共享配置文件

目前我在web.config和app.config文件中都有相同的值。這開始變得混亂,我想爲解決方案中的兩個應用程序共享配置文件。

  • 是否有網絡 應用程序的問題如果配置 是不是在網絡 應用程序的根水平?這裏有限制嗎?
  • 我將失去緩存和 網絡 應用程序的自動循環使用,如果我不使用的web.config
  • 是一般一個壞主意共享配置描述?

回答

9

那麼,你可以將配置的某些部分「外部化」成單獨的.config文件,並在兩個地方使用它們。

例如你可以外部化的連接字符串的設置,如下所示:

<connectionStrings configSource="connectionStrings.config" /> 

,然後有「connectionString.config」文件是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<connectionStrings> 
    <add name="ConfigurationDatabase" 
     connectionString="server=.;Integrated Security=true;database=test"/> 
    <add name="TestDatabase" 
     connectionString="server=TEST;Integrated Security=true;database=test"/> 
</connectionStrings> 

基本上,任何配置節有這樣的「configSource」設置,允許您指定要使用的外部文件。

這樣,您可能可以共享這兩個配置文件的公共部分。

馬克

+0

configSource屬性不允許在其中放入「..」或「〜/」,並指出「它必須引用與配置文件相同的目錄或子目錄中的文件」。鑑於此,如果兩個項目都不能達到比其自身更高的目錄級別,那麼兩個項目如何共享一個外部文件? – 2011-09-19 12:40:01

2

你仍然需要一個網絡的.config因爲有是特定於Web,將不會在你的服務的app.config配置的元素。由於Marc says,使用ConfigSource屬性將使您能夠共享公共元素。

請注意,appSettings元素略有不同:File屬性。

指定包含自定義應用程序配置設置的外部文件的相對路徑。指定的文件包含appSettings添加,清除和刪除屬性中指定的相同類型的設置,並使用與這些元素相同的鍵/值對格式。

此不同的行爲與ConfigSource屬性,因爲你沒有更換與外部文件的完整部分,它可以只包含您想擁有除,或覆蓋值的元素:

可以使用文件屬性來指定一個配置文件,它提供附加的設置覆蓋了在所述的appSettings元素中指定的設置

如果使用ConfigSource分享等元素,那麼你仍然可以看到該應用程序的自動重新啓動時,值改變 - 對restartOnExternalChanges屬性應爲ASP.NET應用程序被忽略的注意,但是使用文件屬性將意味着更改不會導致重新啓動。

外部文件的內容仍然應該被緩存,所以不應該影響性能。