2010-01-15 120 views
4

我做了一個小小的研究,碰到這個跑:http://msdn.microsoft.com/en-us/library/ms228245.aspxconfigSections的用途是什麼?

所以,如果我理解的正確,最終這是什麼東西做的是包括在項目中使用某些.DLL文件,很像:

<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

我猜的區別是,如果你這樣做configSections的方式,你可以通過在webconfig(或其他配置)中創建'name'作爲xml元素來設置一些參數。這是正確的,還是我錯過了什麼?

另外,我注意到,我可以從一個網站的web.config中刪除configSections,它將會運行得很好,特別是以下configSections:

<configSections> 
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> 
     <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> 
      <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> 
      <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> 
       <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/> 
       <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> 
       <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> 
      </sectionGroup> 
     </sectionGroup> 
    </sectionGroup> 
</configSections> 

我讀書的地方,你能做到這一點,有它仍然運行,因爲configSections在machine.config中也是默認定義的。那麼爲什麼要在網站的web.config中再次定義它呢?我假設用一些自定義設置覆蓋machine.config?有什麼方法可以確定machine.config文件的默認內容是什麼?

回答

1

你是對的。 ASP.NET配置部分在machine.config中定義。這是一個層次結構,每個配置文件都會覆蓋其父項。您可以在以下目錄下找到machine.config和根web.config文件。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 
+0

好,感謝那是很好的瞭解,但我也想知道究竟這些事情做。例如,我知道,如果我刪除是這樣的:<添加組件=「System.Web.Extensions程序,版本= 1.0.61025.0,文化=中性公鑰= 31bf3856ad364e35」 /> 然後,我將無法訪問任何我的網站中的System.Web.Extensions中的類。如果我從我的web.config中刪除這些配置節(如果它們不在machine.config中),會發生什麼情況 – Trajanus 2010-01-15 18:59:09

+0

@Trajanus,對於延遲感到抱歉。正如你所說的那樣,有一些新的配置部分,比如'machine.Web.Extensions',它們沒有在'machine.config'中定義。這些部分與ASP.NET AJAX服務有關。因此,如果你刪除了他們的定義,你就不能使用它們。如果您不需要它們,請刪除此部分。 – 2010-01-16 08:31:54

0

你爲了改變網站的行爲再次定義它。

假設你正在運行幾個不同的網站,你希望他們以不同的方式對特定部分進行配置。這就是它們存在於web.config中的原因。

0

所有.NET Framework應用程序從一個名爲SYSTEMROOT文件\微軟.NET \框架\版本號\ CONFIG \ Machine.config中繼承基本配置設置和默認值。 Machine.config文件用於服務器範圍的配置設置。其中一些設置無法在層次結構中較低層的配置文件中覆蓋。

的.NET客戶端應用程序(控制檯和Windows應用程序)使用名爲ApplicationName.config覆蓋繼承的設置配置文件。 ASP.NET應用程序使用名爲Web.config的配置文件來覆蓋繼承的設置。

ASP.NET配置層次的根是被稱爲根Web.config文件的文件,並且它位於同一目錄中Machine.config文件。根Web.config文件繼承Machine.config文件中的所有設置。根Web.config文件包括適用於運行特定版本的.NET Framework的所有ASP.NET應用程序的設置。因爲每個ASP.NET應用程序都從根Web.config文件繼承默認配置設置,所以只需要爲覆蓋默認設置的設置創建Web.config文件。

看到ASP.NET Configuration File Hierarchy and Inheritance