第二章 生成、打包、部署和管理应用程序及类型

来源:互联网 发布:支付宝知托付 编辑:程序博客网 时间:2024/05/16 16:13

本章概述

首先讨论一下生成、打包和部署应用程序及其类型的步骤。本章重点解释如何生成供自己应用程序使用的程序集。

2.1 将类型生成到模块中

本节讨论如何将多个类型的源代码文件生成为一个可以部署的文件。先看看这个简单的应用程序
public sealed class Program{      public static void Main()     {            System.Console.WriteLine("HI");     }}

这段代码就不做太多解释了,大家都明白,要是有不明白的建议先看看基础。再看下文。
为了生成这个示例应用程序,请讲代码放到一个源代码文件中(假设为Program.cs),然后在命令行中执行以下命令(注意:不是普通的命令行窗口,Visual Studio Tools下的Visual Studio 命令提示)
执行命令:csc.exe  /out:Program.exe  /t:exe /r:MSCorLib.dll Program.cs
这个命令行指示C# 编译器生成一个名为Program.exe的可执行文件(/out:Program.exe)。生成的文件属于Win32控制台应用程序类型(/t[arget].exe)。
MSCorLib.dll是一个比较特殊的文件,因为它包含了所有核心类型:Byte,Char,String,Int32等等。其实C# 编译器会自动引用MSCorLib.dll。所以可以简化成
csc.exe  /out:Program.exe  /t:exe  Program.cs
而 /out:Program.exe 和 /t:exe命令行开关是C#编译器默认设定,所以可以继续简化成
csc.exe Program.cs
响应文件
响应文件是一个文本文件,其中包含一组编译器命令行开关。而在执行CSC.exe时,编译器会打开响应文件,并使用其中包含的所有开关,感觉就像是这些开关直接在命令行上传递给CSC.exe。为了指示编译器使用一个响应文件,在命令行中,请在一个@符号之前指定响应文件的名称
假如有一个MyProject.rsp的响应文件包含一下文本
/out MyProject.exe 
/target:winexe
为了让CSC.exe调用这些设置,可以像下面这样调用它。
csc.exe @myProject.rsp CodeFile1.cs CodeFile2.cs
这就告诉了C#编译器输出文件的名称和要创建的是哪种类型的应用程序。可以看出响应文件能带来许多方便,因为不必在每次编译项目时,都手动指定需要的命令行参数。

2.2 将类型集成到模块中

这个标题意思实际上就是我们平时在vs中添加引用的过程。
CSC.exe运行时会去找一个本地的应答文件中CSC.rsp与CSC.exe同目录,其中列出了默认引用的一些dll

PE:Portable Executable(可移植执行体)

2.3元数据概述

托管PE(exe,dll文件)由四部分构成:PE32+头,CLR头,元数据和中间语言
元数据:一个二进制数据块,由几个表组成:定义表(ModuleDef,TypeDef,MethodDef,FieldDef,ParamDef,PropertyDef,EventDef),引用表(AssemblyRef,ModuleRef,TypeDef,MemberRef),清单表
如何查看元数据:ILDasm.exe即IL反编译器打开托管PE(exe或者dll)视图->元信息->显示
查看程序集统计信息:ILDasm.exe中选择视图=>统计

2.4 合并模块以构成一个程序集

程序集:一个或者多个类型定义文件(.cs文件)及资源文件的集合。
CLR操作程序集:CLR操作的是程序集。程序集中包含一个“清单”,清单包含有一些列元数据表,表中是程序集成员的名称,及其他信息。CLR操作的是程序集,以清单为入口,用清单来获取其他文件名称。
程序集分类:单文件(PE文件)和多文件程序集(PE文件+资源文件(gif,jpg文件))
为什么使用程序集:将常用类型放一个程序集,不常用放一个,配置应用程序时,只配置常用,不常用的给个地址,需要时下载。
为什么使用多文件程序集
1、可以用单独的dll或者exe来对自己的写的类进行划分。好处:选择性下载和部署时可以部分部署
2、在dll中或者exe中(程序集)嵌入资源或数据文件(jpg,gif),资源文件和我们打代码就合在一起了
3、用不同编程语言实现程序集的各个类型

2.5 程序集版本资源信息

在Visual Studio中新建一个C#项目时,会自动创建一个AssemblyInfo.cs文件,此文件包含程序集版本信息。
版本号四个部分:1.0.0.0 我们一般认为版本号是1.0,1是主版本号,0是副版本号。
在vs2010中项目属性-应用程序-启动对象设置了之后,查看启动文件属性中就有详细信息了

2.6 简单管理控制

如何控制:在应用程序目录放置一个配置文件(xml代码),可以改变程序集文件的定位和加载策略。
CLR定位一个程序集文件时总是先在应用程序基目录查找。如果没有就找子目录,这就需要在config文件中进行子目录的设置。(相对目录,不是绝对目录)应用程序能控制它在得 目录及子目录,其他目录控制不了
例子:AppDir(文件夹)
   App.exe
   App.exe.config
            SonFiles(文件夹)
            b.dll
如果没有配置文件,app.exe就找不到需要加载的b.dll,在配置文件中设置privatePath=”Sonfiles”,就行了
不同应用程序config文件名称与位置:
exe:与exe在一个目录,与exe全名同名再加.config.如a.exe.config
asp.net Web窗体:Web应用程序根目录,命名Web.config。子目录也有对应Web.config文件,而且应用程序可以用子目录中的config文件
IE客户端控件:HTML页包含一个link,rel属性为Configuration,href属性为配置文件的地址。

原创粉丝点击