.NET应用程序的执行

.NET应用程序的执行方式

目标

通过编译和链接生成单一的本地可执行文件(.EXE)的时代已经过去,在Microsoft Windows中,应用程序的执行早已演变成为基于DLL(动态链接库)的形式,而通过.NET,我们正在向基于虚拟机的程序执行模式演化。

 

主要内容

l         Managed Execution(受控执行或托管执行)

l         基于组件的设计

l         Assembly分析

l         部署

 

Managed Execution


1.         软件在运行时环境中执行;

2.         可移植和安全执行;

 

Java

基于运行时环境:JVM

——JVM = Java Virtual Machine

——JCL = Java Class Library


.NET

基于运行时环境:CLR,FxCL

——CLR = Common Language Runtime

——FxCL = Framework Class Library


.NET软件开发

优点:可以选择你的开发语言和平台


运行.NET程序的客户端必须安装Microsoft.NET Framework

 

设计上的权衡

1.         可移植性;

2.         安全执行(内存管理)

3.         速度?

 

Managed Code

C#VBJ#编译器会生成受控代码

——需要.NET Framework运行和管理的代码

C++有两种选择

1.         受控代码(.NET exe/dll)

2.         非受控代码(native exe/dll)——常用于操作系统级编程和原有应用程序

 

CIL(Common Intermediate Language)

1.         CIL相当于CLR的汇编语言

2.         Managed code == CIL code

 

基于组件的应用程序

应用程序包括一个或多个组件(dll)


基于组件的.NET

CLR FxCL 也是组件


 

Assemblies

1.         Assemblies是对.NET组件的称呼;

2.         .NET中的部署单元(1assembly = 1个或多个源文件的编译结果)


FxCL assemblies存储与GAC之中

l         GAC = Global Assembly Cache

l         位于本地

l         共享

l         版本感知

l         安全性

l         防篡改

l         Some pre-JIT

 

Assembly分析

CLR必须可以找到正确的assemblies

——FxCL assemblies像我们自己的assemblies


程序执行过程的assembly搜索

1.         .NET提供了assembly搜索算法

2.         可以根据.config文件(类似于.ini文件)自定义assembly搜索

3.         无需使用注册表

 

算法分析

l         应用程序(.EXE)制定将要使用的assembly版本

l         GAC(Global Assembly Cache)中搜索相应版本

l         if 未找到 and 存在.config文件 then

到配置文件制定的位置搜索

       else

              .EXE文件所在的路径搜索

l         if 未找到 then

发生错误,程序终止

 

.NET如何发现版本信息

作为manifest编译到.DLL/.EXE

l         可以通过ILDASM工具查看

l         ILDASM = Intermediate Language Disassembler

l         Manifest中存储了版本、依赖关系等信息


Manifest

l         包含对其他assembly的引用(名称、版本、公钥哈希)

l         不包含(assembly的代码,注册信息,位置信息(使用assembly搜索算法确定位置))

 

隐含的特性

l         无需注册表(.NET使用搜索路径)

l         不再发生DLL陷阱(应用程序不会再使用错误版本)

 

Assembly引用

l         通过VS.NET工程文件中的References(引用)文件夹

l         References文件夹中添加引用

 

部署

l         安装到.EXE所在的文件夹中(也称为xcopy deployment)

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

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

l         Zero-touch”部署

通过URL安装:http://server/app/app.exe

应用程序可以定期自动更新

ClickOnce部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值