.Net Framework Programming 读书笔记(2)
[2005-05-04]
2.1 .Net框架部署目标
Dll hell(DLL地狱);注册表;安全问题 代码访问安全(code access security)
2.2 将类型生成为模块
包含各种类型的源代码文件变成一个可部署的文件。
一个托管PE文件包含4部分:PE表头、CLR表头、元数据和IL代码。
元数据表划分为3类:定义表、引用表和清单表
ildasm.exe /adv ...
2.3 将模块组合为程序集
对于App.exe 文件,不仅仅含有元数据的PE文件,他还是一个程序集(assebmly)。
程序集是CLR操作的对象。特征:
--程序集定义了可重用的类型。
--程序集标识有一个版本号。
--程序集可以包含与之相关的安全信息
把程序集视为一个逻辑上的EXE或者DLL将有助于对他的理解。
多文件程序集原因:
--将类型实现在不同的文件中,允许在互联网下增量下载。
--按需要向程序集中添加/删除资源和数据文件。
--包含不同语言实现的类型。(我们可以对每个模块进行ILDasm.exe 获取IL源代码,然后ILAsm.exe传入所有的IL源代码文件。这个技巧要求编译器产生的只是IL代码,所以对VisualC++ 之类的编译器不适用)
可以创建单独的PE文件,让他仅仅包括清单。
命令开关:/t[arget]:exe;/t[arget]:win;/t[arget]:library
注意:/t[arget]:module产生一个不包括清单的元数据PE文件,总是得到DLL文件,它必须被添加到程序集中。
另外,VisualStudio .Net(IDE) 不支持创建多文件程序集,必须使用命令行工具。
[2005-05-05]
很少使用的类型编译为一个模块:
csc /t:module RUT.cs
经常使用的类型编译为一个模块,作为程序清单的保存者:
csc /out:JeffTypes.dll /t:library /addmodule:RUT.netmodule PUT.cs
(把RUT.netmodule文件作为程序集的一部分对待,其中的公有导出类型加入到ExportedTypeDef清单元数据表中)。
2.3.1使用VisualStudio.NET IDE为项目添加程序集引用(界面操作)
2.3.2使用程序集链接器 (AL.exe),典型的用于解决本地化问题。
如:csc /t:module RUT.cs
csc /t:module FUT.cs
al /out:JeffTypes.dll /t:library FUT.netmodule RUT.netmodule
生成了第三个文件JeffTypes.dll文件是个很小的Dll PE文件;程序集链接器不能将多个文件组合成一个;
如:csc /t:module /r:JeffTypes.dll App.cs
al /out:App.exe /t:exe /main:App.Main app.netmodule
2.3.3在程序集中包含资源文件
使用AL.EXE 创建程序集:
/embed[resource]将资源文件(非PE文件)添加到程序集中。
/link[resource]将只更新清单中的MainfestResourceDef表和FileDef表,资源文件不会嵌入程序集PE文件。
2.4 程序集版本资源信息
使用IDE环境为:AssemblyInfo.cs(vb...)文件
使用AL.EXE参阅命令行开关及定制特性。
2.5 语言文化
语言文化中性(cultrue neutral),卫星程序集(satellite assembly)
2.6 简单应用程序集部署(私有部署程序集)
本地目录下的类型。CLR不会加载另一个仅仅提供同名的类型的程序集。
2.7 简单管理控制(配置)
XX(程序.exe).config配置文件,按照规定格式编写:<?xml version="1.0" ...>...<>
一个应用程序可以控制它的基目录和子目录,但不能控制其它目录。
Machine.config文件中的设置会覆盖特定应用程序的配置文件中相应的设置。GUI 工具.Net Framework Configuration
浙公网安备 33010602011771号