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(预计2005年6月)
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中的部署单元
1个assembly = 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名称
你必须在你使用名称空间之前引用它。
- C#系列一
- c#系列一
- C# Redis 系列一
- C#探秘系列(一)
- C# 3.0 入门系列(一)
- C# 3.0 入门系列(一)
- C# 3.0 入门系列(一)
- C# 3.0 入门系列(一)
- 黑马程序员—C#系列 (一)
- 调试c#运行报错系列一
- C# 3.0 入门系列(一)
- C# 多线程学习系列一:认识多线程
- C#之RabbitMQ系列(一)
- Redis系列(一):c#实现redis客户端
- 【C#系列 一】VS2017的安装
- C#基础系列--C#中委托与事件(一)
- C#基础系列--C#中委托与事件(一)
- C#系列教程一:C#的前世今生,VS了解
- Java泛型
- amix the lucky stiff(vimrc)
- exe4j打包+Eclipse打包插件说明 GUI项目打包EXE文件的总结
- 有关strncpy,memcpy,memmove的比较
- tomcat和eclipse安装
- C#系列一
- VC++6.0 Debug模式与Release模式的区别
- Servlet/JSP学习笔记(2)-基础知识
- 农历日期控件解决方案
- Requirements Analysis Process:Requirements Elicitation, Analysis And Specification
- Visual Studio 2008 使用MPI的设置
- 在Eclipse中安装swt designer插件
- 敏捷开发实践体会
- IIS日志清理CMD版的解释