`
javababy1
  • 浏览: 1171880 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

程序集和反射(一)

 
阅读更多

正常情况下,C#代码编译后生成构造块,一般分为以下几种:

exe --可执行程序(winform程序生成的叫winexe,控制台程序生成的是exe)
dll --动态链接库(可以动态加载的类库,是Windows系统中专用的)
netmodule --模块 (VS开发工具中无法生成模块,只能在SDK编译器下以命令行的方式手动生成)

这些都是Windows系统和Windows编程中才会有的概念。值得提醒的是:.NET平台上的托管代码,编译后
生成的exe,dll,和普通的win32应用程序(C/C++/VB6等)生成的exe,dll不同。

程序集,其实就是指的.NET框架应用程序的构造块,一般表现为exe和dll
在.NET出现之前,根本没有“程序集”这么个概念。

程序集的优点:

解决版本控制问题
解决dll冲突(Windows历史上著名的 dll地狱)
Windows系统不允许相同目录下重名,所以会造成dll覆盖的严重问题。
通常软件安装都会操作“注册表”,还会往安装目录中写(dll)文件。

环境变量: 比如path, 是告诉系统, 当要求系统运行一个程序而没有告诉它程序所在的完整路径时,
系统除了在当前目录下面寻找此程序外, 还应到哪些目录下去寻找;)

以前在做Windows应用程序开发时,经常会将很多dll文件,拷贝到Windows环境变量指定的目录下。
这样的话,也容易重名,引发dll地狱

.NET中使用了GAC(全局应用程序缓存)来解决DLL地狱:
有了GAC,应用程序dll不需要拷贝到环境变量下,而是直接存放在GAC中。
程序集(dll)必须先加“签名”,这样的话,即使是重名,也不会发生冲突了。
GAC目录默认在C:/Windows/assembly下。

程序集组成:
1.程序集清单:可以看作是目录
2.类型元数据:指的是编程中用到的资源,元数据是自我描述的
3.实现这些类型的MSIL(中间语言)
4.资源集(二进制)

单文件程序集:单层的小项目通常都是一个dll
多文件程序集:由于dll文件过大,加载困难,消耗资源。
所以,将某些模块独立出来,生成“多文件程序集”
使用SDK命令提示符,可以手动生成netmodule(模块)。

程序集清单的内容:
程序集的版本:可以通过,项目-右键-属性-程序集信息去修改。
在winform中,也可以通过修改AssemblyInfo.cs文件来实现
程序集的两种部署方式:
1.共享(全局)程序集:也叫“强命名程序集”,将程序集保存在GAC中(必须加签名)
2.私有程序集:也叫“弱命名程序集”,将程序集保存在应用程序目录或者子目录


使用SN工具,手动构建“强命名程序集”:

分享到:
评论

相关推荐

    C# 程序集 类型加载 反射

    C# 程序集 类型加载 反射 C# 程序集 类型加载 反射 QQ:292258449

    程序集反射特性

    程序集、反射和特性小示例反射实现的接口 反射方法参数和返回值

    Visual C++源代码 16 如何获取程序集反射内容

    Visual C++源代码 16 如何获取程序集反射内容Visual C++源代码 16 如何获取程序集反射内容Visual C++源代码 16 如何获取程序集反射内容Visual C++源代码 16 如何获取程序集反射内容Visual C++源代码 16 如何获取程序...

    程序集反射工具

    .NET Reflector是一个类浏览器和反编译器,.NET Reflector可以分析程序集并向你展示它的所有秘密。.NET 框架向全世界引入了可用来分析任何基于 .NET 的代码(无论它是单个类还是完整的程序集)的反射概念。反射还...

    C#2.0序列化和反序列化 程序集反射技术

    C#2.0序列化和反序列化 程序集反射技术 C#2.0序列化和反序列化 程序集反射技术

    .net应用程序域、程序集、元数据、反射

    本主题描述应用程序域和程序集之间的关系。您必须首先将一个程序集加载到应用程序域中,然后才能运行该应用程序。运行普通的应用程序会导致将几个程序集加载到一个应用程序域中。默认情况下,公共语言运行库将一个...

    C# 程序集和反射详解

    本文主要介绍了C# 程序集和反射的相关知识。具有一定的参考价值,下面跟着小编一起来看下吧

    C#中的程序集和反射介绍

    主要介绍了C#中的程序集和反射介绍,程序集包含资源文件,类型元数据、IL代码,每个程序集都有自己的名称、版本等信息,反射就是动态获取程序集中的元数据的功能,需要的朋友可以参考下

    .Net程序集信息提取器(含源码)

    该程序提供了查看.Net程序集的功能(功能还未完善:存在乱码问题),该程序主要使用的.Net的反射机制,针对现有的程序集进行反射,从而得到该程序集中的类型,字段和方法,本程序需要扩展和完善(包含源码)

    如何获取程序集反射内容例子C#.net源代码编写

    如何获取程序集反射内容例子C#.net源代码编写

    .Net程序集信息提取器

    该程序提供了查看.Net程序集的功能,该程序主要使用的.Net的反射机制,针对现有的程序集进行反射,从而得到该程序集中的类型,字段和方法,本程序需要扩展和完善

    反射加载其他程序集.zip

    反射加载其他程序集窗体 理解的是万物皆对象 然后去创建 Assembly.Load Actionver

    详解C# 利用反射根据类名创建类的实例对象

    1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile(程序集路径,不能是相对路径); // 加载程序集(EXE 或 DLL) dynamic obj = assembly....

    反射程序集信息

    动态获取动态库的引用,函数,方法名称及类型

    程序集分析检查工具(Lutz Roeder 的 .NET Reflector)

    一个必不可少的工具称为 .NET Reflector,它是一个类浏览器和反编译器,可以分析程序集并向你展示它的所有秘密。.NET 框架向全世界引入了可用来分析任何基于 .NET 的代码(无论它是单个类还是完整的程序集)的反射...

    多线程与程序集

    模拟生产、入库、销售 多线程实现,必要的异常处理 模拟窗口卖票 利用反射技术实现

    C#使用反射加载多个程序集的实现方法

    当开发插件的时候需要用到反射,在客户端动态加载遍历程序集,并调用每个程序集的方法。 创建一个控制台应用程序,首先设计一个接口: public interface ISay { void SaySth(); } 在控制台应用程序下创建...

    C# 动态加载程序集信息

    Module类 表述在模块上执行反射,表述一个程序集的模块信息。 Type类,在System命名空间下,表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型...

Global site tag (gtag.js) - Google Analytics