用Enterprise Library开发应用程序 --- Enterprise Library - January 2006 翻译 第二部分
編譯企業類庫:
當你安裝了企業類庫,安裝目錄會包涵以下源碼:應用程序模塊,Core項目,企業類庫配置控制臺,和QuickStarts。在第一次運行QuickStarts或者企業類庫配置控制臺之前你必須先編譯企業類庫的源碼。
企業類庫的VisualStudio解決方案文件
企業類庫源代碼包含幾個VisualStudio項目,企業類庫包含多種VisualStudio2005的解決方案文件。其中,有三個解決方案文件包含了企業類庫的Core項目和所有的企業類庫模塊(見表1)。你可以使用這些解決方案文件來編譯整個企業類庫或者創建只包含你想編譯的項目。當你編譯企業類庫時,core項目和配置控制臺會自動編譯。
表1:解決方案文件
| 配置 | 描述 | 
| EnterpriseLibrarysln | 包含了整個企業類庫模塊項目,core項目和配置控制臺,不包含單元測試項目。 | 
| EnterpriseLibraryVSTSsln | 包含了整個企業類庫模塊項目,core項目和配置控制臺。包涵所有VSTS(VisualStudioTeamSystem)的單元測試項目。 | 
| EnterpriseLibraryNunitsln | 包含了整個企業類庫模塊項目,core項目和配置控制臺。包涵所有的NUnit的單元測試項目。 | 
另外,每一個企業類庫模塊都有兩個解決方案文件。一個包含NUnit單元測試,另一個包含VSTS(VisualStudioTeamSystem)單元測試。這些解決方案文件包含所有企業類庫模塊項目。它們也包含設計時項目的配置。對于運行配置控制臺來說程序集是必須的,但是對于部署或者運行應用程序來說沒有這個限制。
更多的信息請參考TheEnterpriseLibraryConfigurationConsole
| 注意: | 
| 安全模塊包含一個授權管理器(AzMan)的授權提供者。該提供者要求安裝AzMan以及Interop程序集,MicrosoftInteropSecurityAzRolesdll。企業類庫解決方案文件沒有包含AzMan授權提供者的運行時和設計時項目。如果你想編譯AzMan提供者項目你可以修改企業類庫解決方案文件或者你可以使用安全模塊解決方案文件。 | 
編譯配置文件
企業類庫解決方案文件包含兩種編譯配置文件的方法:Release和Debug。在每個解決方案文件中的所有項目包括單元測試項目都用這兩種方法來編譯配置文件。
編譯企業類庫模塊和配置工具
有兩種方法來編譯企業類庫模塊和配置工具,你可以使用批處理文件或者VisualStudio解決方案文件。
用批處理文件編譯企業類庫
當你安裝企業類庫,安裝程序會在開始菜單創建一個編譯企業類庫的菜單項。單擊這個菜單項來編譯一個Debug版本的企業類庫模塊和配置工具,安裝程序也創建一個菜單項來把程序集復制到bin目錄。單擊這個菜單項拷貝已經存在的程序集到bin目錄下。通過這些批處理文件可以很簡單地進行操作,在企業類庫安裝目錄的src子目錄下可以找到這些批處理文件。
你還可以手工地執行批處理文件,這樣你就可以重寫默認的操作來提供參數。批處理文件有:
·???????????????? Buildlibrarybat該文件編譯所有的企業類庫模塊和配置工具。當運行的時候沒有參數,它接受單一參數來選擇不同的編譯類型,比如Release編譯。
·???????????????? CopyAssembliesbat該文件把程序集復制到bin目錄下。當沒有帶參數運行時,它會把已編譯的程序集復制到INSTALLDIR\ProgramFiles\MicrosoftEnterpriseLibrary\bin目錄。它接受兩個參數。第一個參數表明可選擇的編譯類型,第二個參數表明將要復制的目標目錄。
用VisualStudio解決方案文件編譯企業類庫
你也可以使用VisualStudio編譯企業類庫模塊和配置工具。在VisualStudioNET2005,打開EnterpriseLibraryvstssln或者EnterpriseLibrarynunitsln解決方案文件。在編譯菜單,單擊編譯解決方案。解決方案文件包括整個項目的企業類庫模塊、可選擇提供者、通用程序集和配置工具。
解決方案文件沒有提供復制功能,你可以執行CopyAssembliesbat來拷貝程序集。開始菜單有Copyassembliestobinfolder的快捷方式。
使用注意
這是一些關于編譯企業類庫的補充點:
·???????????????? 配置控制臺要求模塊程序集與配置控制臺(EntLibConfigexe)在同一目錄下面。它需要運行時程序集和設計時程序集。每一個應用程序封裝了與運行時程序集分離的設計時程序集,對于一個使用企業類庫模塊的應用程序來說這些程序集不是必須的。然而,當你使用配置控制臺來改變應用程序模塊的配置時它們是必須的。所有必須的程序集都引用了suffixconfigurationdesigndll。使用CopyAssemblies批處理文件可以把程序集拷貝到bin目錄下。
·???????????????? 企業類庫配置控制臺在配置文件里保存了fullyqualifiedtype的信息,當你的控制臺使用了未簽名的企業類庫模塊版本fullyqualifiedtypes的PublicKeyToken值會為null。如果你重新編譯企業類庫模塊和程序集,你就必須更新已經存在的配置文件來得到正確的PublicKeyToken值。如果你沒有這樣做你的應用程序將使用錯誤版本的模塊程序集。你可以通過使用配置控制臺來更新配置文件,配置控制臺將使用相應版本的企業類庫模塊。選擇性的,你可以手工編輯配置文件和更新PublicKeyToken值。
·???????????????? 如果你安裝企業類庫的一部分,當你執行BuildLibrarybat文件或者在VisualStudio打開一個解決方案文件你將會看到錯誤信息,該信息指出找不到某些項目文件。這種情況發生在使用了一個沒有安裝的應用程序模塊。例如,在一個不包含緩存模塊的企業類庫,如果你運行BuildLibrarybat將會顯示以下錯誤信息:
系系統找不到'Cachingcsproj'文件。Thesystemcannotfindthepathspecified
只有當你安裝企業類庫的一個子集時才會出現這些信息,你可以忽略他們。你安裝的那一部分企業類庫模塊也會被成功編譯。
·???????????????? 安全模塊包含一個授權管理器(AzMan)的授權提供者。該提供者需要安裝AzMan并且需要引用interop程序集,MicrosoftInteropSecurityAzRolesdll。如果你沒有引用interop程序集,當你編譯安全模塊解決方案時將會看到一個錯誤信息。該錯誤信息表明“Interop”類型或命名空間在“Microsoft”命名空間不存在,這錯誤會在沒有安裝AzMan時出現,并且你可以忽略它。安全模塊將會通過編譯,但是AzMan提供者將不可用。
編譯QuickStarts
QuickStart項目沒有包涵在企業類庫解決方案內,每一個QuickStart都有一個包含QuickStart項目和所有必需的企業類庫模塊項目。
給企業類庫添加強命名程序集:
當你使用企業類庫解決方案來編譯企業類庫程序集時,這些程序集并不是強命名的。如果你想使用強命名,你必須創建一個公鑰/私鑰對并修改企業類庫項目文件。
強命名的好處
一個強命名程序集包涵了文件名(沒有拓展名)、版本號,語言文化標識(如果提供的話)——加上一個公鑰和一個數字簽名,它是從一個使用互通的私鑰的程序集文件(該文件包含了名/值對)產生的。給一個程序集加上強命名可以確保程序集的名稱在全球是唯一的,使用同一強命名的程序集將會達到預期的效果(譯注:避免DLLhell、版本沖突)。
例如,如果你在幾個應用程序中共享企業類庫程序集,你可以把它們安裝到一個全局程序集緩存中,其中的每一個程序集必須有一個單一的名稱。你可以使用一個強命名來保證這樣即使你只在單一應用程序使用這些程序集,你可以給程序集加上強命名以保證你的應用程序使用了正確版本的程序集。
強命名將滿足以下需求:
·???????????????? 強命名通過使用單一的鍵值對來防止名稱的不唯一。你可以產生相同的程序集而別人卻不可以,因為程序集用一個私鑰來產生。
·???????????????? 強命名可保護一個程序集的系列版本。一個強命名可以保證沒有人可以偽造一個你的程序集的后續版本。用戶可以確信它們載入的程序集版本是來自創建該應用程序的同一公司。
·???????????????? 強命名提供一個有力的完整性檢驗,通過NETFramework安全檢查可以保證程序集自從創建后就不會被篡改。然而,請注意強命名并沒有包含一個信任水平的等級,例如,數字簽名和證書。
更多的關于在全局程序集緩存使用程序集的信息請查看WorkingwithAssembliesandtheGlobalAssemblyCache
為企業類庫程序集添加強命名
以下過程顯示了怎樣使用VisualStudio2005來為程序集分配強命名。為了給程序集分配強命名你必須擁有一個公鑰/私鑰鍵對。
當要創建一個強命名的程序集時必須使用到公鑰和私鑰密碼對。如果開發者使用企業類庫,他們使用的強命名程序集都是相同的。這意謂著每個人應該使用單一的鍵值對來標記程序集,這個鍵值對應該被安全的存儲。
第一個過程說明如何創建一個鍵值對(你也可以使用一個已經存在的鍵對如果你有一個存在的鍵值對你可以跳過這個過程。)第二過程說明如何獲取和顯示公有的鍵值。第三個過程說明如何為一個程序集分配公有的鍵值。最后一個過程說明如何更新InternalsVisibleTo屬性。
創建一個鍵值對
1.?????? 打開VisualStudio命令窗口,并定位到要創建鍵值對的目錄。
2.?????? 輸入sn-kkeyfilesnk來創建鍵值對。
| 注意: | 
| 你還可以在VisualStudio2005使用創建強命名對話框來創建鍵值對。在解決方案管理器選擇一個項目,在Project菜單單擊Properties彈出項目設計窗口,單擊Signing標簽,在Signing頁面選擇Signtheassembly,然后在Chooseastrongnamekeyfile下拉列表框選擇New。 | 
你必須從鍵值對提取公鑰(在更新InternalsVisibleTo屬性時公鑰是必須的)。以下過程顯示如何提取和顯示公鑰。
提取和顯示公鑰
1.?????? 在命令提示符下輸入sn-pkeyfilesnk從鍵值對提取公鑰。
2.?????? 輸入sn–tppublickeypk來顯示十六進制的公鑰。保持配置控制臺窗口打開(或者復制輸出到一個文本文件)。
下一個過程說明如何為企業類庫程序集分配公鑰。打開EnterpriseLibraryVSTSsln或者EnterpriseLibraryNUnitsln解決方案。(這取決于你安裝了哪一個版本的VisualStudio。)每一個項目都要遵循這些步驟包括單元測試項目和設計項目。
為項目程序集分配公鑰
1.?????? 在VisualStudio的解決方案管理器選擇項目,選擇Project菜單然后單擊Properties(或者右擊項目再單擊Properties)。
2.?????? 在項目設計器單擊Signing標簽。
3.?????? 選擇Signtheassembly復選框。
4.?????? 在Chooseastrongnamekeyfile下拉列表框單擊Browse。
5.?????? 在SelectFile對話框選擇已經創建的key文件或者在文件名輸入框引入文件路徑,單擊Open。
6.?????? 關閉屬性窗口并保存更改。
企業類庫模塊單元測試的程序集與企業類庫模塊的程序集是分開的,為了讓單元測試程序集訪問企業類庫模塊程序集的internal類型和成員,企業類庫模塊使用InternalsVisibleToAttribute定制屬性。你必須更新該屬性來包含強命名程序集的公鑰。
更新InternalsVisibleTo屬性
1.?????? 在VisualStudio單擊Edit,指向FindandReplace,然后單擊FindinFiles。
2.?????? 在整個解決方案下搜索InternalsVisibleTo屬性。
3.?????? 對于每一個InternalsVisibleTo屬性執行下列步驟:
a.???????????????? 復制你從鍵值對提取的完整公鑰(不是token)。
b.???????????????? 給屬性增加公鑰,如下所示:
| ? | CopyCode | |
| [assembly:InternalsVisibleTo("MicrosoftPracticesEnterpriseLibraryExceptionHandlingTests, PublicKey=00240000048000009400000006020000002400005253413100040000010001008B3B735C 2738A3A3518083C40A3AF8518DBA6D299F0DB7883A9BE2BFF1343B72A65A04EE8DEACF3A2A5B240126 C1E803D14FEEDAC508DE566251756E0EAD6323D1C2B121B24904FEE55086CF1ACBD1146194603421DC 0E13D9DC486422180ED756CCDADF31C0B7E4F58FAC82C867F26D8D886A45FF503D7B62BCB24A160C64 F8")] | ||
| 注意: | ||
| 公鑰必須是在單一行上。當你從命令提示符窗口復制時它是多行的(正如該例子所示)。當你更新theInternalsVisibleTo屬性確保它是單行的。 | ||
4.?????? 保存更改。
5.?????? 重新編譯整個解決方案。
?
應用示例:
企業類庫包含每個模塊的源代碼,你可以在你的應用程序包含該源代碼或者編譯并使用編譯后的程序集。更多的關于如何編譯企業類庫模塊的說明請查看BuildingtheEnterpriseLibrary。在你使用企業類庫程序集以前,你必須在你的應用程序增加相關的程序集引用。在編寫應用程序代碼時你必須知道企業類庫的命名空間和對象創建模式。
引用企業類庫程序集
在編譯實現企業類庫模塊的應用程序之前,必須添加對企業類庫模塊程序集的引用和Common與ObjectBuilder程序集。
定制應用程序
1.?????? 添加對企業類庫模塊程序集的引用。在visualstudio,在解決方案管理器右擊項目,單擊AddReferences,單擊Browse標簽選中企業類庫模塊程序集(CopyAssembliesbat可以把所有的企業類庫模塊程序集復制到bin目錄),然后單擊OK。例如,要引用CachingApplicationBlock程序集,瀏覽bin目錄,選擇MicrosoftPracticesEnterpriseLibraryCachingdll,然后單擊OK。
2.?????? 使用相同的過程來配置對Common程序集的引用:MicrosoftPracticesEnterpriseLibraryCommondll與ObjectBuilder程序集:MicrosoftPracticesEnterpriseLibraryObjectBuilderdll。
企業類庫命名空間
所有的企業類庫模塊遵守相同的命名空間約定,所有的企業類庫代碼包含了根命名空間:MicrosoftPracticesEnterpriseLibrary。
每一個企業類庫模塊都在這個根命名空間下包涵自己的命名空間。例如,安全模塊使用MicrosoftPracticesEnterpriseLibrarySecurity命名空間。
復雜的應用程序模塊可以包含子命名空間,但是這只是有了提高可讀性。例如,數據訪問模塊的SQLServer部分使用了MicrosoftPracticesEnterpriseLibraryDataSql命名空間。
可以在源碼文件的最前面使用using關鍵字(C#)或者Imports關鍵字(VisualBasic)來引用命名空間,而不用在源文件部分引用整個命名空間。例如,為了使用緩存模塊的功能可以使用以下方式:
| C# | CopyCode | 
| usingMicrosoftPracticesEnterpriseLibraryCaching; usingMicrosoftPracticesEnterpriseLibraryCachingExpirations; | |
| VisualBasic | CopyCode | 
| ImportsMicrosoftPracticesEnterpriseLibraryCaching ImportsMicrosoftPracticesEnterpriseLibraryCachingExpirations | |
?
| 注意: | 
| 對于VisualBasic項目你可以使用項目設計器的引用頁來設置引用并導入命名空間。可以這樣來打開引用頁:在解決方案管理器中選擇項目,在項目菜單單擊屬性,出現項目設計器,再單擊引用標簽。 | 
創建企業類庫模塊對象
企業類庫的core項目提供對創建需要配置信息的對象的支持。圖表1說明如何利用企業類庫的core項目創建對象。
圖表1使用工廠模式的企業類庫模塊
使用靜態工廠方法
企業類庫模塊包含靜態工廠方法,使用這些方法你可以創建模塊對象。這些靜態方法實現了工廠模式以創建提供者。這意謂著如果你的應用程序使用這些靜態工廠方法,就沒有必要知道任何有關提供者的實現信息。以下代碼顯示一個使用數據訪問模塊的DatabaseFactory類來創建Database對象的應用程序。
| C# | CopyCode | 
| Databasedb=DatabaseFactoryCreateDatabase("Northwind"); | |
| VisualBasic | CopyCode | 
| DimdbAsDatabase=DatabaseFactoryCreateDatabase("Northwind") | |
Database類是一個抽象類,它為提供者實例定義了公用接口。靜態方法CreateDatabase返回一個特殊的實現object類型的提供者(例如一個SqlDatabase對象。)對象的返回類型取決于應用程序的配置信息。
靜態工廠方法使用默認的配置文件,你可以使用配置控制臺來定義你的應用程序的默認配置。如果你沒有定義一個配置文件靜態工廠方法,應用程序將會調用系統的配置文件。這意謂著你的配置信息必須存儲在應用程序的配置文件(Appconfig或者Webconfig)。
配置控制臺可以修改并存儲應用程序的配置文件。以下的XML顯示了定義兩個配置節。
| ? | CopyCode | 
| <enterpriseLibraryConfigurationSourceselectedSource="systemSource"> <sources> <addname="fileSource"type="MicrosoftPracticesEnterpriseLibraryCommonConfigurationFileConfigurationSource,MicrosoftPracticesEnterpriseLibraryCommon"filePath="testexeconfig"/> <addname="systemSource"type="MicrosoftPracticesEnterpriseLibraryCommonConfigurationSystemConfigurationSource,MicrosoftPracticesEnterpriseLibraryCommon"/> </sources> </enterpriseLibraryConfigurationSource> | |
使用注意事項
下面是一些關于配置文件的補充點。
·???????????????? 靜態工廠方法使用配置文件來決定默認的配置信息,這意謂著當你使用靜態工廠方法時必須擁有一個配置文件。
·???????????????? 如果你的配置文件不包含〈EnterpriseLibraryConfigurationSource〉配置節,企業類庫將使用系統的配置文件。這意謂著企業類庫模塊配置數據必須存儲在應用程序的配置文件當中。
·???????????????? 所有的靜態工廠方法使用默認配置文件,這意謂著你用靜態工廠方法創建對象的配置信息會存儲在同樣的文件當中。
使用提供者的工廠方法
一個靜態工廠方法創建相應的配置文件對象然后構造一個提供者工廠對象。你還可以在應用程序代碼中使用提供者工廠的對象。
使用提供者工廠創建提供者
1.?????? 創建一個配置文件對象。
2.?????? 通過配置文件對象創建提供者工廠對象。
3.?????? 使用提供者工廠對象創建提供者。
以下部分詳細地說明這些步驟。
創建配置文件
你可以使用ConfigurationSourceFactory類來創建一個配置源對象,create方法接受一個標識配置文件名稱的字符串參數。這個配置源必須是定義在應用程序的配置文件內(如果沒有定義配置源將會產生一個異常),這意謂著為了使用ConfigurationSourceFactory你必須有一個應用程序的配置文件。以下代碼顯示如何使用ConfigurationSourceFactory創建配置源。
| C# | CopyCode | 
| IConfigurationSourcesource=ConfigurationSourceFactoryCreate("fileSource"); | |
| VisualBasic | CopyCode | 
| DimfileSourceAsIConfigurationSource=ConfigurationSourceFactoryCreate("fileSource") | |
你還可以直接構造配置源對象,配置源的構造器接受配置源所需的信息。以下代碼顯示如何直接構造配置源。
| C# | CopyCode | 
| FileConfigurationSourcefileSource=newFileConfigurationSource(@"ProductApplicationconfig"); ? SystemConfigurationSourcesystemSource=newSystemConfigurationSource(); | |
| VisualBasic | CopyCode | 
| DimfileSourceAsFileConfigurationSource=NewFileConfigurationSource("ProductApplicationconfig") ? DimsystemSourceAsSystemConfigurationSource=NewSystemConfigurationSource() ? | |
?
| 注意: | 
| 企業類庫包含一個配置源提供者SqlConfigurationSource的示例,該提供者使用數據訪問模塊從一個SQL數據庫讀取配置節信息,該提供者的配置節必須派生自SerializableConfigurationSection類。 | 
配置源的相關注意事項
所有的配置源類都實現了IConfigurationSource接口,該接口允許你的應用程序接收配置變化的通知。在企業類庫,只有日志模塊通過注冊來接受配置文件改變的通知。
創建提供者工廠模式
提供者工廠對象的構造器接受一個配置源對象,該對象使用這個配置源為提供者對象讀取配置信息。
| C# | CopyCode | 
| SystemConfigurationSourcesystemSource=newSystemConfigurationSource(); ? DatabaseProviderFactoryfactory=newDatabaseProviderFactory(systemSource); ? | |
| VisualBasic | CopyCode | 
| DimsystemSourceAsSystemConfigurationSource=NewSystemConfigurationSource() ? DimfactoryAsDatabaseProviderFactory=NewDatabaseProviderFactory(systemSource) ? | |
使用提供者工廠來創建提供者
你可以使用單一提供者工廠實例來創建多種提供者實例,你還可以使用多種提供者工廠對象從多種配置源來創建模塊對象。
以下代碼顯示如何使用不同的配置源創建兩個DatabaseProviderFactory對象。DatabaseProviderFactory對象factory1從ProductApplicationconfig文件讀取配置信息,DatabaseProviderFactory對象factory2從應用程序配置文件讀取配置信息。
| C# | CopyCode | 
| FileConfigurationSourcefileSource=newFileConfigurationSource(@"ProductApplicationconfig"); ? DatabaseProviderFactoryfactory1=newDatabaseProviderFactory(fileSource); Databasedb1=factory1CreateDefault(); ? SystemConfigurationSourcesystemSource=newSystemConfigurationSource(); DatabaseProviderFactoryfactory2=newDatabaseProviderFactory(systemSource); Databasedb2=factory2Create("Northwind"); | |
| VisualBasic | CopyCode | 
| DimfileSourceAsFileConfigurationSource=NewFileConfigurationSource("ProductApplicationconfig") ? Dimfactory1AsDatabaseProviderFactory=NewDatabaseProviderFactory(fileSource) Dimdb1AsDatabase=factory1CreateDefault() ? DimsystemSourceAsSystemConfigurationSource=NewSystemConfigurationSource() ? Dimfactory2AsDatabaseProviderFactory=NewDatabaseProviderFactory(systemSource) Dimdb2AsDatabase=factory2Create("Northwind") | |
使用注意
下面是關于提供者工廠的一些補充點:
·???????????????? 一個提供者工廠實例綁定著單一配置的文件,當你構造了一個提供者工廠對象你就不能更改相關的配置源。這意謂著每一個提供者對象的配置節是從相同配置源讀取的。
·???????????????? 以下企業類庫模塊提供者工廠總是返回相同的實例:
·???????????????????????????????? CacheManagerFactory
·???????????????????????????????? SecurityCacheProviderFactory
·???????????????????????????????? ExceptionPolicyFactory
直接構造企業類庫模塊對象
有些時侯你的應用程序配置信息并不存在于配置源里,例如,你的系統可以通過用戶輸入來動態創建配置信息。對于這些情況,你可以通過為構造器指定所需的配置信息來直接構造企業類庫模塊對象。
工廠方法返回一個通用的提供者接口。當你構造一個企業類庫模塊對象你必須通過使用相應的構造器參數來構造一個特殊的提供者類型。這些參數可以調用一個工廠來創建或者通過調用它們的構造器。以下代碼顯示了如何構造數據訪問模塊SqlDatabase對象。
| C# | CopyCode | |
| SqlDatabasedb=newSqlDatabase(@"server=(local)\SQLEXPRESS;database=EntLibQuickStarts;IntegratedSecurity=true"); | ||
| VisualBasic | CopyCode | |
| DimdbAsSqlDatabase=NewSqlDatabase("server=(local)\SQLEXPRESS;database=EntLibQuickStarts;IntegratedSecurity=true") | ||
?
| 注意: | 
| 企業類庫工廠模式包含啟用instrumentation的代碼。如果你直接構造企業類庫模塊對象,instrumentation將不會被這些對象啟用。然而,在大多數場合下,你可以為應用程序提供者綁定相應的instrumentation。更多的信息請參考Instrumentation。 | 
?
配置模塊:
企業類庫模塊的配置信息是以XML格式存儲的。一般的,配置信息都存儲在一個XML文件當中。默認地,包含配置信息的XML文件就是應用程序的配置文件。
你可以手工地編輯XML數據,但是企業類庫提供一個配置工具---企業類庫配置控制臺---大大地簡化了該任務。如果你選擇手工地編輯XML文件,可以參考相應的企業類庫模塊文檔的資料。
使用配置控制臺
企業類庫配置控制臺是一個允許你創建、修改和驗證而不用手工地編輯XML文件的可視化工具。配置控制臺顯示了可用的配置節,可以更改的缺省值和每一個配置的信息。
在第一次使用配置控制臺之前,你必須編譯它。更多的信息請查看TheEnterpriseLibraryConfigurationConsole。
使用配置控制臺
1.?????? 在任務欄單擊開始,指向AllPrograms,Microsoftpatterns&practices,EnterpriseLibrary–January2006,然后單擊EnterpriseLibraryConfiguration。
2.?????? 在File菜單,單擊NewApplication(如果你要配置一個新的應用程序)或者打開應用程序(如果你要配置一個已經存在的應用程序)。
| 注意: | 
| 當你打開一個存在的配置文件,如果你的Machineconfig文件包含任何連接字符串,配置控制臺會顯示數據訪問模塊。更多信息請查看UsageNotes | 
3.?????? 右擊ApplicationConfigurationNode,單擊New,然后從列表單擊一個企業類庫模塊。例如,單擊LoggingApplicationBlock
4.?????? 配置控制臺顯示了默認的配置值,右擊可以更改該值。例如,如果你在配置配置日志模塊并且想增加一個flatfiletracelistener,可以這樣做:
a.???????????????? 右擊TraceListeners。
b.???????????????? 單擊New,然后單擊FlatFileTraceListener。
c.????????????????? 在右邊面板的Filename屬性后面單擊省略號按鈕(),,然后輸入文件名和跟蹤監聽器文件的路徑。
5.?????? 配置完成之后,單擊File,然后單擊SaveApplication。
每一個企業類庫模塊的文檔都包含了配置過程。
使用注意
下面是關于配置控制臺的一些補充點:
·???????????????? 配置控制臺不支持編輯或存儲Machineconfig的配置節,Machineconfig文件可以在運行時被訪問但在設計時不能被修改。因此,不應該把配置信息儲存在Machineconfig文件中。
·???????????????? 配置控制臺顯示了存儲在Machineconfig文件中的連接字符串,但是它只保存應用程序配置文件的連接字符串。如果你使用配置控制臺來修改存儲在Machineconfig文件的連接字符串,這樣的更改將失效。
·???????????????? 在運行時,數據訪問模塊可以使用定義在Machineconfig文件的連接字符串。
·???????????????? 配置控制臺顯示了數據訪問模塊配置信息的連接字符串,這意謂著如果有連接字符串被定義在Machineconfig文件下,當你打開任何應用程序的配置文件不管你是否添加了連接字符串你都可以看到數據訪問模塊結點。
·???????????????? 如果你的應用程序配置包含一個自定義提供者,你必須確保自定義的提供者程序集對現有的配置控制臺是可用的。為了實現可用,你可以把程序集復制到跟配置控制臺在相同的目錄或者把安裝它在全局程序集緩存。你也可以使用DEVPATH環境變量來使配置控制臺正確地調用提供者程序集。
使用備用的配置文件
你可以使用其它數據源—比如SQL數據庫,來導出你的配置信息。應用程序配置文件包含一個定義配置源的配置節。如果該配置節丟失,應用程序配置文件將用作配置源。然而,即使你使用一個備用文件,企業類庫都以XML格式保存你的配置信息。支持讀取配置信息的核心配置類首先會嘗試從配置文件讀取配置節,如果找不到配置節core項目類就又嘗試從系統的配置文件讀取配置節。
使用備用配置源
1.?????? 單擊Start,指向AllPrograms,Microsoftpatternspractices,EnterpriseLibrary–January2006,然后單擊EnterpriseLibraryConfiguration打開企業類庫配置控制臺。
2.?????? 在File菜單,單擊NewApplication(如果你要配置一個新的應用程序)或者打開應用程序(如果你要配置一個存在的應用程序)。
3.?????? 右擊ApplicationConfigurationNode,單擊New,然后單擊ConfigurationSources。
4.?????? 展開SelectedSource結點。
5.?????? 單擊靠近SystemConfigurationSource的箭頭,然后單擊你想使用的配置源。
6.?????? 配置完成之后,單擊File,然后單擊SaveApplication。
加密配置信息
對于存儲在配置文件的靈敏信息是需要注意的,實際上有幾個配置節可能會出現敏感信息。例如,〈connectionstrings〉部分可能包含數據庫用戶名和密碼,如果你需要公共語言運行時監視一個固定的身份,<identity>部分將會包含一個用戶名和密碼。你可以把密碼儲存在<appSettings>或者一個自定義部分。如果你的配置文件包含敏感信息你應該考慮加密這些信息。
10和11版的NETFramework對于配置文件加密的支持有限制。然而,NETFramework20允許你使用一個命令行工具來加密配置文件的靈敏數據。
由于NETFramework20提供了該加密功能,配置控制臺不再包含配置數據加密/解密的功能。然而,你可以使用相關的platform(注:這里可以譯為“第三方”吧?不確定,保留)工具來加密數據。
當需要處理這些加密數據的時候NETFramework20會自動的解密。因此,你不必編寫任何解密的輔助代碼。這意謂著配置控制臺可以顯示已經加密的配置信息,因為它使用platform來讀取加密文件。它也可以寫入加密信息因為它使用platform來寫入信息。
編譯企業類庫:
你可以使用在SystemConfiguration命名空間下的受保護配置類來加密webconfig或者可執行文件的配置文件或者機器水平和應用水平的配置文件。
更多的信息請查看SectionInformation類的ProtectSection方法
配置配置文件:
應用程序使用配置文件來獲得關于企業類庫模塊配置的信息。默認地,應用程序使用一個SystemConfigurationSource類的實例,這意謂著應用程序從配置文件檢索配置信息。你可以使用企業類庫配置控制臺來指定應用程序使用配置文件或者使用一個不同的配置源。
使用應用程序配置文件
默認地,企業類庫配置控制臺自動檢測存放在配置文件(應用程序默認的配置位置)的配置信息。
使用應用程序配置文件
1.?????? 單擊Start,指向AllPrograms,Microsoftpatternspractices,EnterpriseLibrary–January2006,然后單擊EnterpriseLibraryConfiguration來打開企業類庫配置控制臺。
2.?????? 單擊NewApplication圖標或者OpenExistingApplication圖標。
3.?????? 右擊ApplicationConfigurationNode,指向New,然后單擊ConfigurationSources。
4.?????? 控制臺添加默認的SystemConfigurationSource節點。如果你想修改它的屬性,單擊該節點。
5.?????? 為SystemConfigurationSource結點指定一個新的名稱(可選的)。默認的是SystemConfigurationSource。
使用備用配置源
你可以使用配置源而不是應用程序的配置文件。以下過程顯示了做法
使用備用的配置源
1.?????? 如果你想使用一個配置源而不是系統配置文件,右擊ConfigurationSources,指向New,然后單擊Fileconfigurationsource。
2.?????? 設置文件屬性。輸入文件名或者單擊省略號按鈕(…),然后單擊你想使用的文件。
3.?????? (可選擇的)設置Name屬性。給FileConfigurationSource結點輸入一個新的名字,默認是FileConfigurationSource。
設置默認配置源
你也可以選擇默認配置源。以下過程顯示如何這樣做。
設置默認配置源
1.?????? 單擊ConfigurationSources結點
2.?????? 更改SelectedSource屬性。輸入另一個配置源的名稱或者在下拉列表框選擇一項。
企業類庫core項目的文件結構
企業類庫core項目提供了一些服務,比如檢測和配置,并且所有的企業類庫模塊都是依賴于core項目。企業類庫的核心功能被封裝在MicrosoftPracticesEnterpriseLibraryCommondll程序集。
有兩個配置節與企業類庫core項目相關,它們是instrumentationConfiguration配置節和enterpriseLibraryConfigurationSource配置節。這些配置節定義了在應用程序中哪些類型的檢測功能可用以及哪些配置節是被用來訪問配置文件的。以下XML代碼顯示了定義類型的配置節。這些聲明應該定義在應用程序配置文件的<configSections>節。
| XML | CopyCode | 
| <configSections> <sectionname="instrumentationConfiguration"type="MicrosoftPracticesEnterpriseLibraryCommonInstrumentationConfigurationInstrumentationConfigurationSection,MicrosoftPracticesEnterpriseLibraryCommon,Version=2000,Culture=neutral,PublicKeyToken=null"/> ? <sectionname="enterpriseLibraryConfigurationSource"type="MicrosoftPracticesEnterpriseLibraryCommonConfigurationConfigurationSourceSection,MicrosoftPracticesEnterpriseLibraryCommon,Version=2000,Culture=neutral,PublicKeyToken=null"/> </configSections> | |
如果配置文件里沒有enterpriseLibraryConfigurationSource配置節,一個SystemConfigurationSource類的實例將會成為應用程序的配置源。這意謂著當應用程序使用靜態工廠時它是從配置文件檢索配置信息的。
EnterpriseLibraryConfigurationSource元素
EnterpriseLibraryConfigurationSource元素指定應用程序應該使用的配置源,該元素不是必需的。如果它被省略,應用程序將使用一個SystemConfigurationSource實例的實例。
以下部分說明enterpriseLibraryConfigurationSource元素的屬性和子元素。
屬性
表1列出了enterpriseLibraryConfigurationSource元素的屬性。
表1:enterpriselibraryconfigurationsource屬性
| 屬性 | 描述 | 
| SelectedSource | Theconfigurationsourcetouseforthisapplication它必須是<sources>節的一個名稱。T該屬性是必須的。 | 
sources元素
Sources元素是enterpriseLibraryConfigurationSource元素的一個子元素,它列出了應用程序可以使用的配置源。該元素是所需。
Add元素
Add元素是sources元素的一個子元素,它添加配置源的名字。該元素不是必需的。可以有多個add元素。表2列出了add元素的屬性。
表2:增加元素屬性
| 屬性 | 描述 | 
| name | 配置源的名稱。T在一個配置節里name屬性必須是唯一的。T該屬性是所需的。 | 
| type | 一個實現了IConfigurationSource接口類的屬性。 | 
| filePath | 配置文件的路徑。T如果配置源是一個文件該屬性是必需的。 | 
| connectionstring | SQLServer數據庫的連接字符串。T如果配置源是一個SQLServer數據庫該屬性是必需的。 | 
| getStoredProcedure | 獲取數據庫的存儲過程。T當應用程序請求一個配置節時該存儲過程會被調用。T如果應用程序使用SQLServer數據庫的存儲過程來讀取配置節該屬性是必需的。 | 
| setStoredProcedure | 設置數據庫的一個存儲過程。T設置數據庫的一個存儲過程。T當應用程序請求一個配置節時該存儲過程會被調用。T如果應用程序使用SQLServer數據庫的存儲過程來設置配置節該屬性是必需的。 | 
| refreshStoredProcedure | 刷新數據庫的一個存儲過程。Thenameofastoredprocedureinthedatabasethathastheconfigurationinformation當應用程序刷新一個配置節時該存儲過程會被調用。T如果應用程序使用SQLServer數據庫的存儲過程來刷新配置節該屬性是必需的。 | 
| removeStoredProcedure | 刪除數據庫的一個存儲過程。T當應用程序刪除一個配置節時該存儲過程會被調用。T如果應用程序使用SQLServer數據庫的存儲過程來刪除配置節該屬性是必需的。h如果應用程序使用SQLServer數據庫的存儲過程來刪除配置節該屬性是必需的。 | 
instrumentationConfiguration子元素
InstrumentationConfiguration元素可以打開或關閉不同類型的檢測功能。該元素不是必需的。如果在配置源沒有包含該元素,所有的檢測功能都是不可用的。表3列出了instrumentationConfiguration元素的屬性。
表3列出了instrumentationConfiguration屬性
| 屬性 | 描述 | 
| PerformanceCountersEnabled | 指定企業類庫模塊是否使用性能計數器。S指定企業類庫模塊是否使用性能計數器。P該值為true或false。T默認為false。T該屬性不是必需的。 | 
| EventLoggingEnabled | 指定企業類庫模塊是否使用日志。P該值為true或false。T默認為false。T該屬性不是必需的。 | 
| WmiEnabled | 指定企業類庫模塊是否使用WMI事件。P該值為true或false。T默認為false。T該屬性不是必需的。 | 
使用檢測功能
Instrumentation(檢測功能)是為了監視或者測量系統的性能和診斷錯誤。更多的信息請參考MonitoringinNETDistributedApplicationDesign。
企業類庫有以下幾個檢測功能:
·???????????????? 事件日志。企業類庫模塊通知用戶的關鍵事件,比如錯誤或者警告。
·???????????????? 性能計數器。企業類庫模塊記錄主要的性能信息---比如每秒或者一斷時間內發生的關鍵事件的數量,該信息寫入Windows系統性能計數器。
·???????????????? Windows管理規范(WMI)。企業類庫模塊通過WMI報告在模塊內的有效事件。
使用和禁用檢測功能
默認地,檢測功能是禁用的。你可以安裝檢測功能并配置你的應用程序來啟用檢測功能。
安裝和卸載檢測功能
要安裝檢測功能,你可以執行InstallServicesbat批處理文件或者使用Start菜單的installinstrumentation快捷方式。在任務欄單擊開始,指向AllPrograms,Microsoftpatterns&practices,EnterpriseLibrary–January2006,然后單擊InstallInstrumentation。
要卸載檢測功能,你可以執行InstallServicesbat批量批處理文件或者使用Start菜單的uninstallinstrumentation快捷方式。在任務欄單擊開始,指向AllPrograms,Microsoftpatterns&practices,EnterpriseLibrary–January2006,然后單擊UninstallInstrumentation。
配置檢測功能
檢測功能是定義于配置文件的<instrumentationConfiguration>配置節,該節確定整個應用程序的檢測行為。
默認地,每一種檢測功能都是禁用的,你可以使用企業類庫配置控制臺來啟用或者停用。所有的檢測功能屬性出現在右邊面板。當一個屬性設置為True時檢測功能啟用;當一個屬性設置為False,檢測功能禁用。
1.?????? 單擊Start,指向AllPrograms,Microsoftpatterns&practices,EnterpriseLibrary–January2006,然后單擊EnterpriseLibraryConfiguration來打開企業類庫配置控制臺。
2.?????? 單擊NewApplication圖標或者OpenExistingApplication圖標。
3.?????? 右擊ApplicationConfigurationNode,指向New,然后單擊Instrumentation。
4.?????? 設置EventLoggingEnabled屬性。輸入True或False,或者在下拉列表框選擇。缺省值為False。
5.?????? 設置PerformanceCountersEnabled屬性。輸入True或False,或者在下拉列表框選擇。缺省值為False。
6.?????? 設置WmiEnabled屬性。輸入True或False,或者在下拉列表框選擇。缺省值為False。
上一篇:Enterprise Library簡介
下一篇:Enterprise Library設計
?
轉載于:https://www.cnblogs.com/Doho/archive/2006/11/11/558010.html
總結
以上是生活随笔為你收集整理的用Enterprise Library开发应用程序 --- Enterprise Library - January 2006 翻译 第二部分的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        