C#系列一

来源:互联网 发布:筒仓设计软件 编辑:程序博客网 时间:2024/06/05 11:25

C#系列一

目标

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

Managed  Execution

应用程序

 


        

 

运行时环境

操作系统

硬件

 

 

 

 

 

 

 

 

 

 

 


软件基于运行时环境的运行基于两种考虑: 可移植性 安全性

 

基于运行时环境:  JVMTM

——JVM = Java Virtual Machine

——JCL = Java Class Library

                              

Java应用程序

JCL

JVM

     JVM

     JVM

 

 

 

 

 

 


     Linux

   Window

   Macos

                                                                                                                    

                                                                                         

 

 

.NET

基于运行时环境: CLR, FxCL

——CLR = Common Language Runtime

——FxCL= Framework Class Library

 

 

 

 

 

.NET软件开发

选择你的开发语言:

 

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

——Redistributalbe .NET Framework(20MB)

三个版本: v1.0(2002), v1.1(2003), v2.0(预计20056)

Microsoft Windows Server 2003 包含V1.1

必须安装正确的版本

设计上的权衡

-可移植性

-安全执行(内存管理)

-速度

Managed Code

C#, VB, J# 编译器会生成受控代码

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

C++有两种选择

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

非受控代码(native exe/dll)

常用于操作系统级编程和原有应用程序。

CIL = Common Intemediate Language

CIL相当于CLR的编程语言

Managed code == CIL code

基于组件的应用程序

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

例子

 

 

 

 

Assemblies

Assemblies是对.NET组件的称呼。

.NET中的部署单元

1assembly = 1 个或多个源文件的编译结果。

FxCL assemblies存储与GAC(Global Assembly Cache)

位于本地     共享    版本感知    安全性   防篡改  Some pre-JIT

CLR必须可以找到正确的assemblies

FxCL assemblies像我们自己的assemblies

程序执行过程的assembly搜索

DOS应用程序执行回顾

.NET提供了assembly搜索算法

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

无需使用注册表

算法分析

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

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

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

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

   else
   
.EXE文件所在的路径搜索

    If 未找到 then

        发生错误,程序终止

.NET如何发现的版本信息?

作为mannifest编译到.DLL/.EXE

可以通过ILDASM工具查看

ILDASM= Intermediate Language Disassembler

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

Manifest包含对其它assembley的引用

名称,版本,公钥哈希

Manifest不包含

assembly的代码

注册信息

位置信息(使用assembly搜索算法确定位置)

 

隐含的特性

    无需注册表

  .NET 使用搜索路径

    不再发生DLL陷阱

  应用程序不会再使用错误版本

    会不会发生“配置文件陷阱”?

  machine config, user config, app config 等等

Assembly如何被引用?

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

References文件夹中添加引用

部署:

    安装到.EXE所在的文件夹中

  最简便,也称作 xcopy deployment

    将一部分安装到.EXE所在的文件夹中,另一部分在GAC

  GAC 允许你共享、安装多个版本

    通过配置文件自定义部署

  可以自定义安装位置,例如安装到某台服务器上

    “Zero-touch” 部署

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

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

VS 2005中进化为ClickOnce部署

 

部署过程中的细节

    怎样编写配置文件?

    怎样将assembly部署到GAC中?

    怎样为assembly赋予版本号?

    怎样保证assembly的防篡改特性?

名称空间可以按逻辑对类进行划分

增强可读性

减少了类名的冲突

过度使用using将带来问题

干扰可读性

增加名称冲突的可能性

使用alias是一种折中的解决方案

using BT = TeamX.BusinessTier;

System      Core classes, types

System.Net   Networking

System.Data  Database access

System.Windows.Forms GUI

System.XML  XML processing

System.Collections  Data structures

组件(Compenent)

A component == 1 or more classes

.NET中,组件被称为程序集(assembly)

组件和存放的物理位置有关,跟名称控件无直接关系。

建立组件

建立一个class library, 它将被编译为.dll

默认名称控件

Visual Studio.NET建立一个默认的名称控件

依据assembly名称

你必须在你使用名称空间之前引用它。

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击