写在前面:
最近准备写Enterprise Library Step By Step的系列文章,对于每一个应用程序块,我都会用入门篇,进阶篇,剖析篇三篇文章去写。 在入门篇里会详细介绍应用程序块的使用步骤,主要是针对新手入门的;进阶篇会介绍一些应用程序块的更深的应用及扩展机制;剖析篇会去分析应用程序块的底层设计和类设计的一些内容。所有的观点都纯属个人理解,有不当之处请大家多多指教。
一.配置应用程序块概述:
几乎每一个应用程序都需要一些配置信息,这些信息可以是简单的数据库连接信息,或者复杂的多块多层次用户信息。如何以及在哪里存储应用程序配置数据是程序员经常面临的问题。
.为应用系统提供了一个通用的配置管理解决方案,可方便灵活地从各种存储中读写配置信息配置信息
.为读写配置信息提供了简单的接口
.支持不同的配置存储
.支持配置信息的加密
.支持配置文件的动态更新
.支持复杂的配置对象
Config Config Block Block 的使用场景:
.应用系统需要在运行时读写复杂的配置信息
.应用系统需要在配置文件中保存敏感数据(比如密码)
.设计应用系统时能帮助开发人员进行正确的配置读写
.应用系统部署后系统管理员能有一个好的工具修改XM 配置文件
二.使用步骤:
假设已经新建好的项目中,并且已经存在Web.config或App.config配置文件。
第一步:建立自定义配置数据类:
该类根据项目的实际情况建立,需要注意的是该类必须是可序列化的(XMLSerializer),并且可以任意复杂
1using System;
2using System.Text;
3using System.Xml.Serialization;
4
5namespace ConfigurationQuickStart
6{
7 public class EditorFontData
8 {
9 private string name;
10 private float size;
11 private int style;
12
13 public EditorFontData()
14 {
15 }
16
17 public string Name
18 {
19 get{ return name; }
20 set{ name = value; }
21 }
22
23 public float Size
24 {
25 get{ return size; }
26 set{ size = value; }
27 }
28 public int Style
29 {
30 get{ return style; }
31 set{ style = value; }
32 }
33
34 public override string ToString()
35 {
36 StringBuilder sb = new StringBuilder();
37 sb.AppendFormat("Name = {0}; Size = {1}; Style = {2}", name, size.ToString(), style.ToString());
38
39 return sb.ToString();
40 }
41 }
42}
43
第二步:用Enterprise Library Configuration配置应用程序:
1.运行Enterprise Library Configuration 工具,选择File | Open Application 打开App.config文件
2.右击Application并选择New | Configuration Application Block,创建一个配置应用程序块
3.右击 Configuration Application Block 并选择 New | Configuration Section,创建一个配置区,注意对于每一个配置区都要设置一个Storage Provider 和一个Transformer。
4.重命名configuration section为EditorSettings
5.右击EditorSettings 并选择New | XML File Storage Provider,设置它的Storage Provider
6.在FileName输入框中输入EditorSettings.config,路径相对于App.config
7.在Enterprise Library Configuration 工具里面选择New | XML Serializer Transformer。指定它的Transformer
8.选择File | Save All命令保存全部
9.此时在VS中选择项目|显示所有文件,就会发现在项目中多出了一个名为EditorSettings.config的配置文件
10.在项目中选择 属性|生成事件|生成后事件命令行 输入如下内容:
1copy "$(ProjectDir)\*.config" "$(TargetDir)" 第三步:用代码访问配置数据:
1.在项目中添加如下两个引用
- Microsoft.Practices.EnterpriseLibrary.Common.dll,
- Microsoft.Practices.EnterpriseLibrary.Configuration.dll.
2.并在.CS代码中添加:
1using Microsoft.Practices.EnterpriseLibrary.Configuration; 3.写配置信息:注意在写配置信息时是整个配置区被覆盖(无合并),另外,元配置文件必须包含该配置区的定义。
1/// <summary>
2 /// 写XML
3 /// </summary> 4 private void writeXmlConfigDataButton_Click(object sender, EventArgs e)
5 {
6 EditorFontData configData = new EditorFontData();
7
8 if (fontDialog.ShowDialog() == DialogResult.OK)
9 {
10 configData.Name = fontDialog.Font.Name;
11 configData.Size = fontDialog.Font.Size;
12 configData.Style = Convert.ToInt32(fontDialog.Font.Style);
13
14 ///注意WriteConfiguration 方法,有两个参数:
15 ///第一个是配置节名称
16 ///第二个就是自定义配置类的对象
17 ///实际上就是将配置数据写到这个配置节里去了
18 ///程序对此的处理是透明的
19 ConfigurationManager.WriteConfiguration("EditorSettings", configData);
20
21 StringBuilder results = new StringBuilder();
22 results.Append("Configuration Data Updated:");
23 results.Append(Environment.NewLine);
24 results.Append(‘\t‘);
25 results.Append(configData.ToString());
26
27 }
28 4.读配置信息:
1/// <summary>
2 /// 读XML
3 /// </summary> 4 private void readXmlConfigDataButton_Click(object sender, System.EventArgs e)
5 {
6 Cursor = System.Windows.Forms.Cursors.WaitCursor;
7
8 ///GetConfiguration方法就一个参数,即配置节名称
9 ///注意别忘了进行强制类型转换
10 EditorFontData configData = ConfigurationManager.GetConfiguration("EditorSettings") as EditorFontData;
11
12 StringBuilder results = new StringBuilder();
13 results.Append("Configuration settings:");
14 results.Append(Environment.NewLine);
15 results.Append(‘\t‘);
16 results.Append(configData.ToString());
17 results.Append(Environment.NewLine);
18
19 Cursor = System.Windows.Forms.Cursors.Arrow;
20 } 入门篇就到这里了,下面我会尽快写配置应用程序块的进阶篇及剖析篇的:)
Feedback
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-10-14 11:46 by
Martin Yan 比较不错的入门介绍,希望能继续看到后续的文章
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-10-14 12:36 by
雷波 不错,继续期待.
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-10-14 16:48 by
Sadly_Lee 10.在项目中选择 属性|生成事件|生成后事件命令行 输入如下内容:
1copy "$(ProjectDir)\*.config" "$(TargetDir)"
這個地方asp.net項目怎么設置啊
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-10-14 19:09 by
Terrylee To:Martin Yan,雷波
多谢支持,我会尽快写的:)
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-10-14 19:10 by
Terrylee To:Sadly_Lee
在ASP.NET中不用设置,只要相对于Web.config的相对路径就可以了
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-10-14 23:12 by
wyn 很好,一直想看关于Enterprise library的文章!
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-10-15 09:40 by
Simon 非常不错。
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-02 14:33 by
jeffers EditorSettings.config在没有使用ConfigurationManager.WriteConfiguration写入之前是空的?还是有基本的schema,只是没有value。
我的程序总是出错!
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-02 15:19 by
Terrylee @wyn
@Simon
多谢支持:)
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-02 15:20 by
Terrylee @jeffers
EditorSettings.config是空的,不需要自动手动填写,完全由配置管理工具写入:)
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-02 19:58 by
Aaronzhu @Terrylee
"EditorSettings.config是空的,不需要自动手动填写,完全由配置管理工具写入:)"
好像不是这样的。
因为EditorSettings.config文件中的内容是由ConfigurationManage将EditorFontData序列化后写入的,不是由配置管理工具写入的。因此如果没有没有执行ConfigurationManager.WriteConfiguration则EditorSettings.config应该是空的。
而,在web程序中,代码里不可能执行对config文件的写操作的,因此在web程序中,应该怎么生成EditorSettings.config文件的内容?
我想这才是jeffers的问题。是这样嘛?
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-03 11:05 by
BrianXue 看到这里我还是不太明白Enterprise Library 的具体作用是什么,
但是谢谢。
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-03 12:21 by
Terrylee @BrianXue
Enterprise Library是微软提供的一系列的应用程序块,包括配置,数据访问,安全,日志,缓存,加密等。这些程序块你可以直接在项目中应用,而且这些程序块是有源码的,也可以自行扩展。本篇配置应用程序块是后面所有的应用程序块的基础,Enterprise Library 是以配置驱动的。
乱说了一通,不知道对你有没有帮助?:)
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-03 12:25 by
Terrylee @Aaronzhu
你说得对,是我看错了。最近有点晕了^_^
在Web中写入.config文件我还真没尝试过……
非常感谢您的提醒!
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-10 13:53 by
bendise Enterprise Library 在那里运行,我找不到
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-10 14:12 by
Terrylee @bendise
我不太明白你说的是……
Enterprise Library下载安装后在开始菜单里面有一项
在你的程序中应用时,需要添加相应的DLL,默认的目录为:
C:\Program Files\Microsoft Enterprise Library\bin
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-17 09:50 by
bendise 在项目中选择 属性|生成事件|生成后事件命令行 输入如下内容
到这步我不会作了,属性|生成事件 ,在那里?? 能给张截图吗,谢谢
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-17 11:53 by
Terrylee @bendise
请参见我今天Post的一篇《使用.NET Remoting开发分布式应用——配置文件篇》
随笔
这篇随笔里面也用到了这步操作
我在里面加了图片:)
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-24 15:38 by
西门吹雪 好文章,一直希望找这样的文章现在终于找到。谢谢同时支持terrylee继续发布相关的文章。
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-24 15:50 by
Terrylee @西门吹雪
多谢支持,最近项目比较紧,所以停了几天。我会尽快发布其他的……
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-24 17:30 by
西门吹雪 @Aaronzhu
在web程序中,代码里不可能执行对config文件的 "写" 操作的,.... ??
只要是ASPNET的帐户拥有对Config文件的写权限不就可以写Config文件了吗?只不过看写进去的是什么文件了,如果写到web.config文件里面当前的Session就会丢失.
web程序就会重启。顺便请教@Terrylee 在web项目中Enterprise Library能否把配置的一些信息写到自定义的配置文件里面.
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-29 16:18 by
栖息的熊 @在项目中选择 属性|生成事件|生成后事件命令行 输入如下内容
我是这样写的
copy "sourceDir\*.config" "tarDIr"
编译成功了
不知道$是做什么用的
但我发现sourceDir下的config改变之后,tarDir下的没变
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-29 16:18 by
栖息的熊 @在项目中选择 属性|生成事件|生成后事件命令行 输入如下内容
我是这样写的
copy "sourceDir\*.config" "tarDIr"
编译成功了
不知道$是做什么用的
但我发现sourceDir下的config改变之后,tarDir下的没变
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-29 16:23 by
Terrylee @栖息的熊
生成后事件命令行应该这样写:
copy "$(ProjectDir)\*.config" "$(TargetDir)"
这个是固定的语法,请参考宏的知识
不要手工修改成copy "sourceDir\*.config" "tarDIr"
该命令是在生成后事件命令,编译是不会报错的,只不过生成没有执行而已
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-30 10:50 by
栖息的熊 不知道参考宏的什么方面的知识,msdn上看了一会,不太明白。
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-11-30 11:19 by
Terrylee @栖息的熊
可以专门找本这方面的书或者google一下啊^_^
其实在这方面没必要花太多的时间
在企业库里面,用到的就这一个
记住就行了。
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-12-28 17:12 by
蓝海泛舟 to 西门吹雪
做过试验了。在asp.net项目中是不能使用作者的方法写入EditorSettings.config的。即使将iis的默认执行用户设置为administrator也不能修改。
所以只能手写,或写一个桌面配置工具写入配置文件。
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-12-28 17:18 by
error 为什么我在生成后事件那里定义了“copy "$(ProjectDir)\*.config" "$(TargetDir)" ”,编译就老是报告“生成后事件出错”?
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-12-28 17:20 by
error 这个语法应该没有问题吧?怎么执行不成功呢?copy 就是dos那个命令吧?是有什么限制?
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-12-29 10:37 by
VLER 我下载了Enterprise Library的Web Cast,很多细节讲解的比较笼统.呵呵.然后上网一搜就找到你这来了.谢谢你将学习心得拿出来分享.以后长来你这里学习了.呵呵.元旦快乐
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2005-12-30 08:25 by
Terrylee @VLER
欢迎有空来坐坐:)
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-01-17 00:01 by
vivid 如果在ASP.NET程序中的 EditorSettings.config文件中手动添加内容,然后测试
ReadXML的功能,具体怎么添加啊?
我添加了好像不可以哦,谢谢啦^_^。
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-01-17 17:20 by
Terrylee <?xml version="1.0" encoding="utf-8"?>
<EditorSettings>
<xmlSerializerSection type="ConfigurationQuickStart.EditorFontData, ConfigurationRuntimeData, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<EditorFontData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name>宋体</Name>
<Size>21.75</Size>
<Style>1</Style>
</EditorFontData>
</xmlSerializerSection>
</EditorSettings> # re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-02-07 13:48 by
程序生活 急问:Enterprise Library和offline application block有什么区别呀?
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-02-15 08:25 by
Terrylee @程序生活
Application Block最早有11个组成,在Enterprise Library中只选取了其中的7个。
Offline application block不包括在EL中
楼主讲得很好..
辛苦了。
期待楼主把 "剖析篇" 写出来。
msdn上对 Enterprise Library 基础部分的也讲得不少,
对大家而言,分析里面的代码是非常有意义的!
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-03-03 16:46 by
Terrylee @好好好好好好好好好好好好好好好
剖析篇只写了配置应用程序块,现在已经停止了
我打算在设计模式系列中体现……
另外,想研究一下Enterprise Library 2.0...
楼主回得好K快...
偶才看完第一部分...
现在我们公司新写的ERP已用上了 Enterprise Library ,
还有用 SharpDevelop 作为winform 框架...
真期待楼主设计模式系列的讲解!
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-03-03 17:38 by
Terrylee # re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-03-15 10:27 by
jedliu 能否告诉我 属性|生成事件|生成后事件命令行 这个在哪里,我看了你写的《使用.NET Remoting开发分布式应用——配置文件篇》 还是找不到,你用的是2005还是2003?
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-03-15 12:46 by
Terrylee @jedliu
在解决方案窗口中,项目上点击右键,可以找到~~~~
这些都是针对VS2003的
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-03-16 10:31 by
jedliu 谢谢Terry!
可我还是无法在web里找到!
我知道在winform里有,但web里没,是不是只是对win的?!
我刚接触这些,懂得太少,期待赐教!
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-03-16 11:42 by
Terrylee @jedliu
Web下面不用做这一步
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-04-17 10:36 by
lyceum luo 现在Enterprise Library 已经发布2.0版本了。和楼主讲的这个版本有很大不同。楼主能不能在有时间的时候。把Enterprise Library 2.0 和1.0作一个比较。原来在1.0下的设置。现在在2.0下应该怎么设置。期待楼主的文章能早点发布。热烈期望中。。。。。。。
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-06-05 22:45 by
hstang 能告知把配置写入SQL SERVER怎么配吗?在Enterprise Library configuration 中怎么配生也不能成功的把配置数据写入数据库
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-06-06 08:27 by
TerryLee # re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-09-14 17:15 by
tomato[匿名] 真是佩服您得无私奉献! 而且你还真是身怀绝技儿不骄! 佩服! 我也是刚刚开始用企业库! 看了微软得web cast但是迷迷糊糊得! 看了你写得! 爽!^_^
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-09-15 13:05 by
TerryLee @tomato[匿名]
过奖了,呵呵
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-11-13 13:20 by
Lee[匿名] webcast 的EL专题感觉乱七八糟的 理论大篇 你这个好很多一看就明白
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-11-13 13:33 by
TerryLee @Lee[匿名]
谢谢:)
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-11-27 21:50 by
天涯海角[匿名] 想不到有比我还菜的,问"Enterprise Library 在那里运行,我找不到",我引用还是会了.只可惜以上的示例是C的,我在学VB2005,唉,命苦呀.
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2006-11-28 09:52 by
TerryLee @天涯海角[匿名]
看一下Hands On Lab,有VB.NET的
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2007-01-09 11:40 by
初学者[匿名] 请问一下:
10.在项目中选择 属性|生成事件|生成后事件命令行 输入如下内容:
1copy "$(ProjectDir)\*.config" "$(TargetDir)"
是什么意思啊
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2007-01-11 11:43 by
student[匿名] :)
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2007-01-15 08:48 by
TerryLee @初学者[匿名]
拷贝配置文件到bin目录下
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2007-01-23 08:22 by
Jinwmmail 在 EL 2.0 版里就不要
1copy "$(ProjectDir)\*.config" "$(TargetDir)"
这个啦.
建议大家下个 EL 2.0 版.
# re: Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 回复 更多评论
2007-01-23 22:51 by
TerryLee @Jinwmmail
2.0下都是用应用程序配置文件的,所以不需要
现在已经有3.0的CTP版了