`

程序集和反射(一)

 
阅读更多

正常情况下,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工具,手动构建“强命名程序集”:

分享到:
评论

相关推荐

    程序集反射特性

    程序集反射特性是.NET提供的一种强大的动态编程能力,允许我们在运行时检查、交互和实例化程序集内的类型、方法、属性等元素。本文将深入探讨程序集、反射和特性的概念及其应用。 首先,让我们了解什么是程序集。...

    C# 程序集 类型加载 反射

    本文将深入探讨C#中的程序集、类型加载以及如何使用反射进行动态操作。 首先,程序集(Assembly)是.NET Framework的基本构建块,它包含了执行代码、资源和元数据。在C#中,我们可以使用`System.Reflection....

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

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

    程序集反射工具

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

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

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

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

    综上所述,理解和掌握C# 2.0的序列化与反序列化以及程序集反射技术,对于开发高效、健壮的.NET应用程序至关重要。通过合理利用这些技术,开发者能够编写出更灵活、适应性强的代码,提高软件的可维护性和可扩展性。

    反射程序集信息

    在.NET框架中,反射是一种强大的工具,它允许程序员在运行时检查和操作程序集(包括类、接口、方法等)的元数据。标题"反射程序集信息"直指反射的核心应用,即动态获取和操作程序集中的信息。描述中提到的“动态获取...

    C# 程序集和反射详解

    程序集是代码、资源和元数据的集合,是.NET应用程序的基础构建块,而反射则提供了一种在运行时动态探索和操作类型的能力。通过熟练掌握这些概念,开发者能够更高效地利用.NET Framework进行开发,实现更加灵活和模块...

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

    C#中的程序集和反射是.NET Framework开发中的关键概念,它们在构建和运行时环境的灵活性和可扩展性中起到核心作用。 程序集是.NET Framework应用程序的基础构建块,它是一个包含资源、类型元数据和中间语言(IL)...

    C#动态加载程序集

    如果我们的动态程序集放到和应用程序在同一个目录里时,不会产生序列化和反序列化的问题。但是一旦我们把各种功能的程序集放到不同的内层文件夹时,在处理反序列化的时候需要额外的一些操作才能实现。 动态加载程序...

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

    反射是.NET Framework提供的一种强大的工具,它允许运行时检查程序集的元数据,并且能够在运行时动态创建和操作类型及类型实例。在本程序中,反射机制被用来获取程序集的Assembly对象,然后通过Assembly对象可以访问...

    反射加载其他程序集.zip

    一个程序集可以是一个DLL文件或一个可执行文件(EXE),它定义了类型、资源和安全信息。当你需要在运行时加载未在当前程序集中定义的类或方法时,反射就派上了用场。 反射加载其他程序集的核心API是`System....

    多线程与程序集

    总结来说,多线程技术可以提升程序的并发性能,而程序集和反射则是.NET开发中的核心概念,提供了一种动态探索和使用代码的方式。在实际项目中,结合使用这些技术可以创建出高效、可扩展且易于维护的软件系统。例如,...

    【ASP.NET编程知识】未能加载文件或程序集“AspNetPager”或它的某一个依赖项 拒绝访问.docx

    在 ASP.NET 开发中,我们经常会遇到程序集加载问题,例如“未能加载文件或程序集“AspNetPager”或它的某一个依赖项。拒绝访问”这种错误信息。这种错误通常是由于程序集的版本不兼容、依赖项缺失或权限问题引起的。...

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

    程序集反射(Reflection)是一种强大的工具,允许我们在运行时动态地获取关于.NET程序集及其内部类型、方法、属性等元数据的信息。在C#编程中,我们经常利用反射来实现一些动态操作,例如:加载未知类型的类、调用...

    .Net程序集信息提取器

    本文将详细探讨.Net程序集信息提取器的工作原理,以及它如何利用反射机制来揭示程序集中的类型、字段和方法,同时探讨其潜在的扩展和完善方向。 首先,.Net程序集是.NET应用程序的可执行文件或库,其文件扩展名通常...

    C#小程序示范实例 反射源码

    在C#编程中,反射是一项强大的特性,它允许运行时检查和操作程序集、类型、方法、属性等元数据。本实例是基于C#和Visual Studio 2008开发的一个小程序,展示了如何使用反射来读取并显示DLL文件中的信息。通过选择一...

    C#动态调用程序集方法

    反射是.NET框架提供的一种特性,它允许我们在运行时检查程序集、类型、方法等元数据,并且能够在运行时动态创建对象和调用方法。这对于插件式架构、自动化测试、元编程等场景非常有用。 在C#中,`System.Reflection...

    如何获取程序集版本信息实例C#.net源代码编写

    综上所述,获取C#.NET程序集的版本信息是一项基本的编程任务,涉及到反射、`Assembly`和`AssemblyName`类的使用,以及理解.NET框架的版本控制策略。通过熟练掌握这些知识点,开发者能更好地管理和控制软件的版本。

Global site tag (gtag.js) - Google Analytics