CLR:生成、打包、部署和管理应用程序及类型
CLR:生成、打包、部署和管理应用程序及类型
解决如下存在的问题:
1. 所有的应用程序都使用DLL,可能出现DLL hell
2. 安装时复杂性
3. 涉及安全性
将类型集成到模块中
csc.exe /out:Program.exe /t:exe /r:MsCorlib.dll Programe.cs
csc.exe c#编译器
/out:Programe.exe 生成文件名Programe.exe
/t:exe 生成一个CUI应用程序 /t:winexe 生成一个GUI应用程序
/r: MsCorlib.dll 引用程序集
/noconfig 忽略局部和全局csc.rsp文件
应答文件(.rsp):指定需要的编译器开关,方便编译
元数据概述
CLR头包括
主版本号 |
副版本号 |
标志 |
方法定义标记 |
模块入口方法 |
强名称数字签名 |
元数据表大小和偏移量 |
元数据是一个二进制数据块,由三个表构成:定义表、引用表、清单表。
查看元数据用ILDasm.exe工具,视图—元信息—显示。
程序集的所有文件中,只有一个文件包含清单。清单包含作为程序集一部分的其它文件的名称,使得程序集具有自描述性。具有清单元数据表的文件有如下特性:
*程序集定义了可重用的类型;
*程序集标记了一个版本号;
*程序集可以有关联的安全信息。
配置文件中有一个codeBase元素,它指定一个url。程序集的所有文件都放在这个url处。
多文件程序集的优点:
*将常用和不常用的类型放在不同文件中,以实现“增量”方式下载文件;
*可以在自己的程序集中添加资源和数据(如Excel文件或Word文件)
*程序集包含的各个类型可以采用不同的编程语言来实现
VS IDE 不支持创建多文件程序集,只能使用命令行工具。
/t:module 开关,生成.netmodule模块,不包含清单元数据表
/addmodule:xx.netmodule 开关,把模块添加到程序集
生成新的程序集时,被引用程序集的所有文件必须都存在,运行应用程序时,则不需要(用到的才必须存在)
使用Visual Studio IDE 在项目中添加程序集
右击项目—添加引用
使用程序集链接器Al.exe
/main:方法名 指定入口方法
/embed[resource] 添加资源文件嵌入到程序集
/link[resource] 获取资源文件(是非嵌入,独立的)
/win32res parth 嵌入标准win32资源
/win32icon parth 嵌入图标资源
程序集版本资源信息 AssemblyInfo.cs
版本号:
格式 |
主版本号 |
副版本号 |
Build号 |
Revision号 |
示例 |
3 |
5 |
64 |
3 |
前两个编号构成了公众对一个版本的理解,如.NET Framework 3.5版本。第三个编号指出程序集的生成编号,最后一个编号指出当前build的修订次数。
语言文化
用AL.exe /c[ulture]:text创建单独的只包含语言文化的程序集,放在同名目录中。Text是语言文化字符串,如en-US代表美国英语,zh-CHS代表中文
简单应用程序部署
打包和安装的3种机制:
1. 直接复制所有文件,卸载时,只需删除所有文件即可
2. 使用.cab文件,通常用于Internet下载情形,目的是压缩文件,以缩短下载时间
3. 使用VS 项目属性中的发布,生成一个MSI文件,可以实现“即需安装”,还可以安装任何必备组件
简单管理控制
在应用程序的基目录中安装一个配置文件,包含的是XML文件。对不同的应用程序文件名称和位置不一样:
*对可执行应用程序来说,配置文件必须在应用程序的基目录中,而且必须采用EXE文件的全名作为文件名,并附加一个.config扩展名。
*对ASP.NET Web 窗体应用程序来说,文件必须在Web应用程序的虚拟根目录中,而且总是命名为Web.config。
*如果程序集包含由Microsoft Internet Explorer 容纳的客户端控件,那么HTML页必须包含一个link标记,它的rel属性要设为“Configuration”,href属性要设为配置文件的URL,名称任意。