【.NET】程序集

  从技术角度上说。程序集可以由多个模块组成。实际上,模块这个术语一般用于表示一个合法的.NET二进制文件。在大多数情况下,程序集只有一个模块组成,这种情况下,程序集和实际二进制文件是一一对应的。(因此被称作单文件程序集)

  单文件程序集的左右必要部分(首部信息、CIL代码、类型元数据、清单和必须的资源)都包含在一个.exe或者.dll包中。

  另一方面,多文件程序集是.NET模块的集合,这些模块作为单个逻辑单元进行部署和版本化。通常,其中的一个会作为主模块,它包含程序集级别的清单,主模块的清单记录了他依赖的每一个相关模块。

  根据命名习惯,多文件程序集的辅助模块的文件扩展名一般是.netmodule,但这并不是CLR的强制要求。辅助模块.netnodules也包含CIL代码和类型元数据,同时还有一个模块级别的清单,该清单值记录了该模块外部引用的程序集。

  多文件程序集的另外一个有点是:允许模块由不同的.NET编程语言进行编写。

  程序集并不包含特定平台的指令。相反,它包含的是独立于平台的CIL指令。当.NET运行库把一个程序集加载进内存时。CIL将会被编译成目标平台可以理解的指令。  

  当一个客户端程序使用定义在外部程序集的类型时,CLR只是加载外部程序集的副本。由于.NET运行库在查找被引用的程序集使,并不查询系统注册表,因此我们可以程序集和外部程序集一起放到计算机的某个位置。

时间: 2024-10-11 03:28:28

【.NET】程序集的相关文章

SQL Server通过外部程序集注册正则表达式函数(CLR函数)

1.下载dll程序集(通过C#编写的支持正则的方法),百度网盘下载: 1.1如果只想用,可以直接下载MSSQLRegexExtend.dll https://pan.baidu.com/s/1qX8eHa8 1.2正则程序集对应的解决方案MSSQLRegexExtend.sln,已打包 https://pan.baidu.com/s/1qXZja9m 2.SQL Server数据库注册程序集 CREATE ASSEMBLY AssemblyRegex from 'D:\MSSQLRegexExt

《Inside C#》笔记(完) 程序集

程序集内部包含了各种相关的模块.资源文件.配置文件等,将这些在功能上相关的文件整合到单个文件中,以便于部署和维护.使用C#编译器编译程序时,生成的便是程序集. 一.清单数据 a)如果编译的是独立应用程序或是dll,清单数据会被保存在生成的PE文件中,这被称为单文件程序集:但如果是多文件程序集,清单数据会单独保存. b)清单数据包含的内容有:程序集的名称:版本信息:签名:文件:引用的程序集:类型:自定义Attribute:产品信息. 二.程序集的作用 a)将多个模块打包成程序集可以带来性能的提升,

为什么.Net平台不支持程序集卸载(Assembly.Unload)?

我们知道在.net平台中反射提供了在运行时动态的获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象.我们知道反射中可以通过System.Reflection.Assembly命名空间下的 Assembly.Load 动态的加载程序集信息,获取我们想要的一切信息.那么当我们动态加载完程序集并对其使用完之后,我们想卸载掉它,不想在内存中留下垃圾信息,这时我们发现Assembly并没有提供Assembly.Un

.NET 程序集Assembly使用

概述 一直以来,我们都在用C#编写程序,编写程序的时候,我们用到继承.多态.接口以及泛型,我们也都明白子类可以继承抽象类,并能够重写父类的抽象方法,可是大家是否想过,如下几个问题: 1.凡树必有根和叶,类的继承也如此,如何通过程序集查找所有继承父类的之类的程序集名称? 2.如果程序B被其他程序调用,如何通过程序集查询调用B的所有程序? 3.如何查询当前项目通过添加引用了哪些程序集? 带上上面的三个问题,我们来学习下.NET 程序集 Assembly. 查询继承父类的程序集合BaseType .N

未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件

连续两天都为这个运行时错误“类型初始值设定项引发异常”而烦恼,调试也不知道哪里出了问题.上网Google一下,一大堆相同的问题,可是按照那些方法折腾来折腾去,问题还是一样.最后在CSDN上发帖子问了,果然“重赏之下必有勇夫”,很快就有高手回复了,问题也随着解决了.哈哈.在此写个随笔,以后如果大家遇到类似问题,也可参考一下,自己也做个备忘,不然放在电脑上,又找不到,我的电脑文件到处乱放,有时连我自己都找不到^_^. 问题是这样嘀: 项目采用了三层架构和工厂模式,并借鉴了PetShop的架构,因为这

未能加载文件或程序集“DotNetOpenAuth.Core, Ve

“/”应用程序中的服务器错误. 未能加载文件或程序集“DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246”或它的某一个依赖项.系统找不到指定的文件. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.IO.FileNotFoundException: 未能加载文件或程

程序集=命名空间

命名空间是用来组织和重用代码的编译单元.如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了. 所谓namespace,是指标识符

.net 程序集的加载与反射

一. 程序集的加载: 在CLR内部使用System.Reflection.Assembly类的静态Load方法尝试加载程序集. //LoadFrom 根据已知的程序集路径加载程序集 Assembly a = Assembly.LoadFrom("@c://query.dll");

C# 动态加载程序集dll (实现接口)

一.程序集(接口程序集):LyhInterface.Dll namespace LyhInterface{    public interface ILyhInterface    {        void Run();    }} 二.程序集(实现接口的程序集):LyhClassLibrary1.dll, LyhClassLibrary2.dll,LyhClassLibrary3.dll,所有程序集引用:LyhInterface.dll namespace LyhClassLibrary1{

C#-VS程序集

程序集即代码组,可以是单个文件或多个文件,按一个整体部署,但可指定自身调用其他程序集的版本. 推出原因 为解决dll地狱而推出,也可解决其他问题.dll地狱,a应用使用dll版本1,b应用使用dll版本2,传统的com(一般用dll执行)模式,会自动调用最新版本的dll,如果这个dll不向后兼容(大多dll都不向后兼容),导致装了b应用后,a应用不能使用. .net模式,在程序集中,指定使用哪个版本,在调用时,默认使用指定的版本,解决了dll地狱问题. 程序集信息 主版本,次版本.修订号.内部版