--应用程序的执行C#程序设计通过编译和链接生成单一的本地可执行文件(.EXE)的时代已经过去,在MicrosoftWindows中,应用程序的执行早已演变成为基于DLL(动态链接库)的形式,而通过.NET,我们正在向基于虚拟机的程序执行模式演化。应用程序的执行•ManagedExecution•基于组件的设计•Assembly分析主要内容ManagedExecution•思考:–软件在运行时环境中执行–为何如此?可移植和安全执行硬件操作系统运行时环境应用程序Java•基于运行时环境:JVMTM–JVM=JavaVirtualMachine–JCL=JavaClassLibraryx86WindowsJVMPPCMacOSJVMARMPalmOSJVM……JVMJava应用程序JCL.NET•基于运行时环境:CLR,FxCL–CLR=CommonLanguageRuntime–FxCL=FrameworkClassLibrary硬件操作系统CommonLanguageRuntime.NET应用程序.NETFrameworkClassLibrary.NET软件开发•选择你的开发语言和平台x86WindowsCLRARMPocketPCCLRPPCFreeBSDCLRx86LinuxCLR.NET应用程序FxCL……CLRVBC#C++J#….NET软件开发•运行.NET程序的客户端必须安装Microsoft.NETFramework–Redistributable.NETFramework(20MB)–三个版本:v1.0(2002),v1.1(2003),v2.0(2005)–MicrosoftWindowsServer2003包含v1.1–必须安装正确的版本.NET软件开发•设计上的权衡–可移植性–安全执行(内存管理)–速度?ManagedCode•C#,VB,J#编译器会生成受控代码–需要.NETFramework运行和管理的代码•C++有两种选择–受控代码(.NETexe/dll)–非受控代码(nativeexe/dll)•常用于操作系统级编程和原有应用程序•ManagedExecution•基于组件的设计•Assembly分析基于组件的应用程序•应用程序包含一个或多个组件(dll)•例子Front-endObjectObjectObjectGUI.exebusiness.dlldata.dllDB基于组件的.NET•CLR和FxCL也是组件Process.EXE.DLLCLR(MSCORE.dll)CoreFxCL(MSCORLIB.dll)JITCompilerobjcodeAdditionalFxCLComponents(DLLs)OSandHardwareAssemblies•Assemblies是对.NET组件的称呼•.NET中的部署单元1个assembly=1个或多个源文件的编译结果VisualStudio.NET.EXE/.DLLcode.vbcode.vbcode.csassemblyFxCLassemblies•FxCLassemblies存储与GAC之中–GAC=GlobalAssemblyCache–位于本地–共享•ManagedExecution•基于组件的设计•Assembly分析Assembly分析•CLR必须可以找到正确的assemblies–FxCLassemblies像我们自己的assembliesCLRJIT编译器进程CoreFxCL.DLL.DLL.EXEobjcode其余FxCL组件(DLLs)程序执行过程的assembly搜索•DOS应用程序执行回顾–.NET提供了assembly搜索算法–可以根据.config文件(类似于.ini文件)自定义assembly搜索算法分析•应用程序(.EXE)指定将要使用的assembly版本•在GAC(GlobalAssemblyCache)中搜索相应版本•If未找到and存在.config文件then到配置文件指定的位置搜索else到.EXE文件所在的路径搜索•If未找到then发生错误,程序终止DEMOAssembly如何被引用?•通过VS.NET工程文件中的References(引用)文件夹•在References文件夹中添加引用