Modern C#系列课程(1):应用程序的执行

================================================================
目标
================================================================
通过编译和链接生成【单一】的【本地】【可执行文件】(.EXE)的时代已经过去,在 Microsoft Windows 中,应用程序的执行早已演变成为基于 【DLL】(动态链接库)的形式(这样,就可把相同的功能封装到DLL中,程序员就不需要重复的完成相同的功能),而通过 .NET,我们正在向【基于虚拟机】的程序执行模式演化。

特点:单一、本地、可执行


================================================================
Managed Execution(托管执行)
================================================================
1.应用程序的运行层次:
---应用程序
---运行时环境【如Java虚拟机】
---操作系统
---硬件

2.由此,.NET运行的环境如下:
------------------------------------------------------
.NET 应用程序    |   .NET Framework Class Library
------------------------------------------------------
Common Language Runtime
------------------------------------------------------
操作系统
------------------------------------------------------
硬件
------------------------------------------------------


3.设计上的权衡
---可移植性   //提升
---安全执行(内存管理)  //提升
---速度  //降低


4.Managed Code
C#, VB, J# 编译器会生成受控代码
---需要 .NET Framework 运行和管理的代码,才称为Managed Code
---也可以理解为编译后成为中间语言代码,而不是exe文件。
C++有两种选择
---受控代码(.NET exe/dll)
---非受控代码(native exe/dll)//常用于操作系统级编程和原有应用程序

 

================================================================
基于组件的设计
================================================================
1.基于组件的应用程序:
----应用程序包含一个或多个组件(dll)//程序不是一个人开发,如可以购买商用的组件


2.基于组件的 .NET的环境说明(CLR 和 FxCL 也是组件)(FxCL: .NET框架的核心类库)
-----------------------------------------------------
EXE文件
-------------|---------------------------------------
JIT Compliler|   <-----------.DLL
             |   <-----------Additional FxCL Components (DLLs)
-------------|---------------------------------------
Object Code  |
-------------|---------------------------------------
CLR
-----------------------------------------------------
Os and HardWare


3.Assemblies//程序集
----Assemblies是对 .NET 组件的称呼
----.NET中的部署单元
----1个 assembly = 1 个或多个源文件的编译结果(也就是多个cs文件编译后,生成了一个exe和多个dll文件,因此,部署的时候也要把exe和多个dll文件都要copy到客户的机器上)

4.FxCL assemblies(框架的核心类库)
FxCL assemblies 存储与 GAC 之中
----GAC = Global Assembly Cache//全局程序集缓存,通常为于C:/windows/assembly...下。
----位于本地
----共享
----版本感知
----安全性
----防篡改


================================================================
Assembly 分析
================================================================
1.CLR必须可以找到正确的assemblies
---FxCL assemblies 像我们自己的 assemblies


2.程序执行过程的assembly搜索
---.NET 提供了assembly搜索算法
---可以根据.config文件(类似于.ini文件)自定义assembly搜索
---无需使用注册表(dos下需要注册表注册)


3.assembly搜索算法分析
---应用程序(.EXE)指定将要使用的assembly版本
---在GAC(Global Assembly Cache)中搜索相应版本
---If 未找到 and 存在.config文件 then
---       到配置文件指定的位置搜索
---   else
---    到.EXE文件所在的路径搜索
---If 未找到 then
---        发生错误,程序终止
主要是在三个位置:GAC,配置文件指定的位置,EXE所在的位置

但是,所要搜索的文件版本是如何区分的呢?他是通过Manifest实现的。


4.Manifest
作为mannifest编译到.DLL/.EXE中
【任何一个项目都可以看到“引用”这一项】
----可以通过ILDASM工具查看
----ILDASM = Intermediate Language Disassembler
----Manifest中存储了版本,依赖关系等信息


5.Manifest 包含对其他assembly的引用
----名称,版本,公钥哈希
Manifest不包含
----assembly的代码
----注册信息
----位置信息 (使用assembly搜索算法确定位置)


6.隐含的特性
----无需注册表   //.NET 使用搜索算法搜索路径
----不再发生DLL陷阱  //应用程序不会再使用错误版本
----会不会发生“配置文件陷阱”?  //machine config, user config, app config 等等

 

7.Assembly如何被引用?
通过VS .NET工程文件中的References(引用)文件夹
----在References文件夹中添加引用


================================================================
部署
================================================================
1.DOS时代(Copy)-->Windows时间(安装,写注册表)-->.NET时代(XCOPY)

2.安装到.EXE所在的文件夹中
---最简便,也称作 xcopy deployment

3.将一部分安装到.EXE所在的文件夹中,另一部分在GAC中
---GAC 允许你共享、安装多个版本

4.通过配置文件自定义部署
---可以自定义安装位置,例如安装到某台服务器上

5.“Zero-touch” 部署(smart client的原型)
---通过URL安装: http://server/app/app.exe
---应用程序可以定期自动更新(检测版本信息)
---在VS 2005中进化为ClickOnce部署

6.部署过程中的细节
---怎样编写配置文件?
---怎样将assembly部署到GAC中?
---怎样为assembly赋予版本号?
---怎样保证assembly的防篡改特性?
以上问题将在本系列中第11讲中具体阐述

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值