CLR via C# 读书笔记2-7
来源:互联网 发布:程序员的烦恼 编辑:程序博客网 时间:2024/05/29 02:11
简单的管理控制 (配置)
用户能够使用一个配置文件来控制程序的运行, CLR 会读取其中的内容来调整定位/载入程序集的策略。
这些配置文件以 XML 格式书写,并与某个程序/机器进行关联。使用一个独立的配置文件(而不是注册表)使得这些设定能够更容易的分发。这里先举个实际应用的例子:
计划配布的产品目录:
AppDir directory (产品根目录)|- Program.exe|- Program.exe.config (配置文件)|- AuxFiles (子目录,存放参照的程序集/第三方类库) |- MultiFileLibrary.dll |- FUT.netmodule |- RUT.netmodule
由于参照的类库(MultiFileLibrary 等文件) 不存放在主程序同一层目录中, CLR 会找不到这些文件,导致运行后发生 System.IO.FileNotFoundException 异常。为了解决这个问题就需要配置文件的介入(命名规则为主程序加上 .config 扩展名),以下是其中的内容
<configuration><runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><probing privatePath="AuxFiles" /></assemblyBinding></runtime></configuration>
现在 CLR 定位一个程序集时,会先检索程序目录(和之前一样),如果他不能发现需要的程序集,就会继续查找 AuxFiles 子文件夹。这里你还可以指定多个子目录,但是需要注意的是你不能指定一个程序目录之外的目录(不管是通过绝对路径还是相对路径)。你可以这样理解:应用程序能够管理它自身的目录(包括其下的子目录),但是不能管理除此之外的目录。
对于CLR来说查找到需要的程序集是个耗时的处理,特别是以下场合:
- 配置文件中定义了许多privatePath
- 需要对应多culture
- 查找的路径是网络路径
第1,第3中情况应尽量避免;对于第2种情况,你可以在配置文件中明确指定支持的culture,这样CLR 在查找satellite assemblies 时不用遍历所有culture从而节约部分时间。如果你的程序在查找程序集时有问题,可以借助 Microsoft 的一个小工具: FusLogVw.exe(http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx)。
配置文件的命名与存放路径取决于程序的种类:
■ 对于可执行文件 (EXE),配置文件必须存放在程序的根目录,而且必须命名为程序文件加 “.config”
■ 对于Microsoft ASP.NET Web Form 程序,文件必须存放在 Web 程序的虚拟根目录,并且命名为 Web.config。另外,这种场合下子目录也可以包含 Web.config 文件,这其中的设定会被继承。
前面提到过配置文件能和某台机器相关联:当你安装 .NET Framework 时,他建立一个 Machine.config 文件并存放在以下目录
%SystemRoot%\Microsoft.NET\Framework\version\CONFIG
其中的设定会对所有本机运行的程序产生影响。
- CLR via C# 读书笔记2-7
- clr via c#读书笔记
- CLR via C#读书笔记
- CLR via C# 读书笔记1-7
- CLR via C# 读书笔记2-2
- CLR via C# 读书笔记1-2
- CLR via C# 读书笔记2-1
- CLR via C# 读书笔记2-3
- CLR via C# 读书笔记2-4
- CLR via C# 读书笔记2-4 追记
- CLR via C# 读书笔记2-5
- CLR via C# 读书笔记2-6
- CLR via C# 读书笔记目录
- CLR via C# 2
- CLR via C# 读书笔记 1-2 创建线程的成本
- CLR via C# 读书笔记1-1
- CLR via C# 读书笔记1-3
- CLR via C# 读书笔记1-4
- CLR via C# 读书笔记2-6
- spring bean 的作用域
- 把图片转化为灰度图
- C语言用指针实现将字符串里的单词顺序倒置
- C#区分中英文统计字符串的长度
- CLR via C# 读书笔记2-7
- 如何使用SignalTap II观察reg值?
- 同样都是搞技术的,国内和国外的差距,怎么就这么大呢?
- 设计模式 - 外观模式
- Android开发:实现带图片和checkbox的listview
- SecureCRT无法输入问题解决
- 虚拟机下ubuntu上不了网
- hdu-1133
- IOException while loading persisted sessions: java.io.EOFException