MSDN讲座学习笔记(一).NET应用程序的执行

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

** Managed Execution **

**

**

**

**

软件在运行时( CLR )环境的执行,提高了软件的可移植性可安全性。 **

**

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

-------Redistributable .NET Framework (20MB)

------- 三个版本: v1.0(2002),v1.1 ( 2003 ), V2.0 (预计 2005 年底)

-------Microsoft Windows Server2003 包含 v1.1

------- 必须安装正确的版本

设计上的权衡:

-------- 可移植性(明显提高)

-------- 安全执行(内存管理)(亦有明显提高)

-------- 速度(第一次运行可能会让你感觉太慢,但是再次执行时会有明显提高,只会比你的本地代码( Native Code )慢一点点。)

CIL ( Common Intermediate Language ),他相当于 CLR ( Common Language Runtime )的汇编语言,你可以通过在命令行提示符下用 idlasm 反汇编一个 .exe 文件来查看。

** 基于组件的应用程序

**

现代软件设计,一个应用程序往往包括一个或多个组件( dll ),在执行过程是由 JIT ( Just In Time ) Compiler 将所有的功能组件编译完成来生成目标代码。

Assemblies 是对 .NET 组件的称呼,同时是 .NET 的一个部署单元,一个 Assembly 是一个或多个源文件的编译结果。

FxCL ( DotNet Framework Class Library ) assemblies 存储在 GAC ( Global Assembly Cache ),它位于你本地计算机,具有共享性,版本感知性,安全性和防篡改性(利用 Public Key Token )注: GAC 中项目的组织和一般文件的组织不同,它允许有相同的文件名。

Assembly 执行原理:程序执行时, .exe 调用 dll 文件,调用是通过 .NET 提供的 assembly 搜索算法来保证应用程序引用的组件能够被找到。搜索算法如下:

1. 应用程序指定将要使用的 assembly 版本

2. 在 GAC 中搜索相应版本

3. If 未找到 and 存在 .config 文件 then

到配置文件所在的位置搜索

Else

到 .exe 文件所在的路径搜索

If 未找到 then

发生错误,程序终止

所以 .NET 应用程序无需使用注册表了

那么,应用程序是怎样指定 dll 文件的版本的呢?

应用程序通过 Manifest 存储版本信息的,若 A 引用 B,Manifest 被编译到 A 的 .EXE/DLL 中。( Manifest 中存储信息和版本信息等,但不包括 assembly 代码,注册信息和位置信息,我们可以通过 ILDASM=Intermediate Language Dissembler 查看)

因此, .NET 也不会发生 DLL 陷阱和“配置文件陷阱”。

** .NET ** ** 应用程序部署

**

1. 安装到 .EXE 所在的文件夹下(最简便,也称 xcopy deployment )

2. 一部分安装到 .EXE 所在的文件夹中,一部分在 GAC 中( GAC 允许共享且可以安装多个版本)

3. 通过配置文件自定义部署(可自定义安装位置)

4. “ Zero-touch ”部署

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

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

--- 在 VS 2005 中进化为 ClickOnce 部署

Published At
Categories with Web编程
Tagged with
comments powered by Disqus