程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Visual Studio 2005窗體配置文件

Visual Studio 2005窗體配置文件

編輯:關於.NET

Visual Studio 2005把強數據類型擴展到了配置文件中,添加了設置的范圍、基於GUI的屬性編輯器和拖放配置類的只讀約束。

在.NET 2.0的一些新特性中,包含了對System.Configuration名稱空間的修補和Visual Studio 2005配置編輯器。與以前的實現方式相比,新的類把桌面和Web應用程序的配置方法提升到了一個完善的新的層次。本文聚焦於簡單的桌面應用程序,該應用程序的唯一目的是顯示和修改自己的配置文件的內容。如果要運行這個應用程序,你必須下載Visual Studio 2005公眾beta版。

一些新特性

最重要的兩個配置文件特性是用於類型安全性的強數據輸入和用戶設置信息范圍的分離和編輯。

類型安全性(Type Safety)

以前的.NET框架組件只允許字符串設置信息。當我們把設置信息直接讀入非字符串變量的時候,就會遇到一些問題,如下所示:

int maxConnections =

ApplicationSettings.AppSettings.Key["MaxConnections"];

如果配置信息的內容不是字符串,而表現為其它的數據類型,例如布爾型、整型或更復雜的數據類型,你就必須編寫定制的代碼,轉換字符串值或建立並填充適當的對象。與此形成對照的是,新的API為實現定制的串行化程序處理了所有基本數據類型和接口。此外框架組件還為一些經常用到的編程結構(例如數據源連接和URL)提供了內建的處理程序。

范圍(Scopes)

新API使用了一個叫做范圍(scopes)的概念來區分應用程序與用戶設置。你需要使用Application(應用程序)范圍來設置應用程序的一些細節信息(例如連接字符串)和其它驅動應用程序的一些值,這些值一般不會(不傾向於)改變。User(用戶)范圍是用於存放用戶可配置的應用程序值的(例如最後的窗口位置和最常使用的文檔)。更重要的是,User范圍為每項設置存儲了默認值。當用戶使用應用程序改變這些默認值的時候,配置文件把這些更新後的值存儲在單獨的位置中。這是很重要的,因為它保證了應用程序配置文件的完整性,並且把用戶特定的數據保存在用戶的系統配置中。不用進行任何額外的開發,配置框架組件就能在後台自動地把用戶特定的設置信息讀取出來。

ThisConfigEditor應用程序

本文中提供的示例應用程序ThisConfigEditor(圖1所示),是一個用於顯示自己的配置文件中的設置信息的簡單工具。盡管非常簡單,但是它可以作為滿足大多數應用程序需求的很好的跳板。

圖1:示例配置編輯器:顯示示例項目配置文件的設置信息

在這個項目中Visual Studio自動生成了大多數文件(圖2所示)。

圖2:Visual Studio為項目生成的文件,添加了ThisConfigEditor.cs文件

唯一需要在代碼編輯器中修改的文件是ThisConfigEditor.cs。這個應用程序不需要任何特殊的部件或資源,並且所有的配置設置信息都由Visual Studio新的屬性編輯器來處理。當Visual Studio建立一個新項目的時候,它會自動地生成一個Properties文件夾,並且用處理屬性編輯器生成的配置設置信息的類來填充它。屬性編輯器自動地更新app.config文件和Settings.cs類文件(生成的屬性的類包裝),因此你不需要手動地處理這些文件;實際上,最好在你對新的配置文件標記的基礎有透徹的理解之後,才手動處理這些文件。你可以在微軟MSDN站點上找到配置文件標記的完整解釋。

屬性編輯器

請雙擊解決方案管理器中的"Settings.settings"條目載入屬性編輯器。

圖3:屬性編輯器:雙擊"Settings.settings"條目載入屬性編輯器

圖3顯示的是為演示目的建立的兩個配置屬性:FilesDirectory和Connection。屬性編輯器表格允許你指定名稱、數據類型、范圍(默認情況下有兩種類型的范圍:User和Application)和值。此處最有趣的屬性是Connection設置。從類型(Type)下拉列表中選擇(Connection string)會載入一系列的對話框,用於建立連接字符串(圖4和圖5所示)。

圖4:選擇數據源:從類型列表中選擇連接字符串設置類型的時候,Visual Studio將載入一系列的對話框來定義字符串屬性

圖5:連接屬性對話框:在選擇連接字符串類型之後出現這個標准的連接屬性對話框

生成了什麼樣的內容?

屬性編輯器中的所有這些工作就是自動地生成配置設置信息和大量的代碼。盡管深入了解這些內容超出了本文的范圍,但是粗略地看一下是有好處的。如果你打開本文代碼下載中的app.config文件,你可以看到在建立項目的時候Visual Studio建立了含有什麼內容的ThisConfigEditor.exe.config文件。盡管我們更有興趣的是Settings.Designer.cs源文件(也包含在下載的代碼中)。這個類提供了按照從屬於應用程序主名稱空間(在例子中是Example.Properties,位於Settings類中)的名稱空間中的名字對設置信息進行簡單地和直接的訪問。請注意特性(property)與每個配置設置信息相對應。包裝每個特性的屬性(attribute)定義了特性所處的范圍和默認值。由於Settings類繼承自ApplicationSettingsBase類(System.Configuration API中的一個新的集合類),你可以使用名稱直接訪問這些屬性或者枚舉所有的配置設置信息,ThisConfigEditor示例就是這樣做的。

枚舉配置屬性

ThisConfigEditor的顯示的核心是ThisConfigEditor.cs代碼文件中的私有的PopulateListView方法:

private void PopulateListView()
{
 ListViewItem item = null;
 this.buttonUpdateSetting.Enabled = false;
 this.textBoxSettingValue.Enabled = false;
 this.listViewSettings.Items.Clear();
 Properties.Settings settings = Properties.Settings.Default;
 foreach (SettingsProperty property in settings.Properties)
 {
bool match = false;
switch (_dt)
{
 case DisplayType.All:
match = true;
break;
 case DisplayType.Application:
foreach (System.Collections.DictionaryEntry attribute in property.Attributes)
{
 if (attribute.Value is System.Configuration.ApplicationScopedSettingAttribute)
 {
match = true;
break;
 }
}
break;
 case DisplayType.User:
foreach (System.Collections.DictionaryEntry attribute in property.Attributes)
{
 if (attribute.Value is System.Configuration.UserScopedSettingAttribute)
 {
match = true;
break;
 }
}
break;
 }
 if (match)
 {
item = new ListViewItem(property.Name);
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, property.PropertyType.ToString()));
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, settings[item.Text] as string));
item.Tag = property;
this.listViewSettings.Items.Add(item);
 }
}
 }

通過判斷私有枚舉字段_dt(它與窗體中的組合框的選擇相關聯,該組合框用於選擇顯示哪些配置屬性:全部的、應用程序的或者用戶的),代碼枚舉出配置屬性。集合中的每個成員都是一個SettingProperty實例(System.Configuration API中的另外一個新類,用於表現獨立的配置屬性),它也包含一個DictionaryEntry實例集合,用於表示它們的多個屬性。通過在屬性集合上進行迭代操作,代碼搜索出與組合框中選擇的范圍相匹配的屬性。在匹配到之後,代碼顯示通過建立一個新的ListViewItem並把它添加到窗體的ListView上,從而顯示配置屬性。

我們的修改到哪兒去了?

因此,在浏覽了這些代碼並運行該應用程序之後你可以看到ThisConfigEditor.exe.config文件中的不同配置設置信息。為了理解配置框架組件是如何工作的,我們來看一下當你改變一個User范圍設置(圖6所示)的時候發生了什麼事情。

圖6:改變User范圍的設置信息

改變的設置信息沒有保存到應用程序的配置文件中;作為代替,該API在用戶的配置(profile)中為應用程序建立了一個新目錄(如果這個目錄並不存在才建立),在這個目錄中增加了一個叫做user.config的文件(圖7所示)。

圖7:新的用戶配置文件:.NET框架組件保存的示例應用程序的新的用戶配置文件的位置

采用這種方法分離數據,通過使用戶特定的數據與用戶保持關聯,保護了應用程序配置文件的完整性。而且,.NET框架組件自動地載入用戶特定的內容而不需要開發者來干涉。請注意,最後的一個目錄與應用程序的版本號相對應。這確保了當某個屬性的數據類型發生改變的時候,應用程序的延續版本將維護它們獨立的完整性而不會相互干擾。

精簡框架組件又落後了

Pocket PC上的精簡框架組件的實現有時候看起來不受.NET世界的重視。它的1.0版本的實現沒有為System.Configuration名稱空間和注冊表做任何准備。2.0的beta版文檔在System.Configuration名稱空間中出現了每個類實體的精簡框架組件,就像beta文檔中的所有名稱空間中的大量類的實現方法一樣,但是現在是不支持的。人們只能希望這只是新的.NET平台的一個短暫的階段,並且最後的發布版支持與桌面版相同的能力。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved