认识程序集:1. 程序集的生成

大话C# WPF基础入门和进阶,深入浅出解析系列课程 19 换台电脑出现问题呢 未找到类型 local1:Human 请确保不缺少程序集引用并且已经生成所有引用的程序集; 2 后台界面逻辑代码; 阅读详情

源文来看:http://www.cnblogs.com/netatomy/archive/2008/06/10/1216872.html

程序集(Assembly)是.NET程序的最小组成单位。每个程序集都有自己的名称、版本等信息。程序集通常

 

表现为一个文件(.exe或.dll文件),这样的程序集被称为单文件程序集,这种程序集是最常见的。程序

 

集也可以由多个文件组成,每个文件都是一个模块文件或者是一个资源文件,这样的程序集被称为多文件

 

程序集。下面来了解一下如何生成单文件程序集和多文件程序集。

 

1. 单文件程序集的生成

 

这是最常见的程序集,使用 Visual Studio 只能生成单文件程序集。使用 csc.exe 能够很轻松地生成

 

单文件程序集:

 

csc.exe /target:library /resource:Hello.jpg Hello.cs

 

上述命令执行后,会生成一个名为 Hello.dll 的文件,该文件组成了单文件程序集。这个文件是一个托

 

管模块,存储了类型元数据和中间语言,还嵌入了资源文件 Hello.jpg 的内容(通过使用 /resource 

 

选项)。类型元数据描述了模块中定义的类型及其成员,中间语言是编译后的托管代码。

 

程序集本身其实是一个逻辑概念,对于自身的描述是通过程序集清单来实现的。程序集清单是一种元数据

 

,描述了程序集的名称、版本、区域性和强名称信息,还包括组成程序集的文件的列表和资源信息,以及

 

其他信息。在单文件程序集中,程序集清单的元数据直接保存在主模块文件中。

 

在本例中,程序集中的名称是Hello,版本没有提供,默认为0.0.0.0,区域性为语言中立,强名称信息为

 

空,文件列表只有Hello.exe,托管资源为Hello.jpg。

 

2. 多文件程序集的生成

 

多文件程序集比较少见,而且除了使用 csc.exe 之外,有时还需要使用 AL.exe。假设有两个源代码文件 

 

A.cs 和 B.cs,我们有两种生成多文件程序集的方法,这两种方法的主要区别在于程序集清单是存储在某

 

个模块中还是单独存储于主模块中。

 

先看第一种方法,只使用csc.exe就可以了:

 

csc.exe /target:module A.cs

 

csc.exe /target:library /addmodule.A.netmodule /out:Hello.dll B.cs

 

第一个命令将 A.cs 编译为一个模块文件,A.netmodule,该文件仅包含类型元数据和中间语言,不包含

 

程序集清单,是一种“原始”的模块文件,不能独立存在,必须从属于程序集。第二个命令将 B.cs 编译

 

成模块文件,Hello.dll。这个文件除了包含类型元数据和中间语言之外,还存储了程序集清单,因为成

 

为主模块文件。此时,程序集的名称仍然为 Hello,但文件列表的内容变成了两个:A.netmodule 和 

 

Hello.dll。

 

再来看第二种方法,需要使用 csc.exe 和 al.exe 两个命令:

 

csc /target:module A.cs

 

csc /target:module B.cs

 

al.exe /target:library /out:Hello.dll A.netmodule B.netmodule

 

前两个命令将 A.cs 和 B.cs 编译为两个“原始”的模块文件,A.netmodule 和 B.netmodule。第三个

 

命令使用了AL.exe(Assembly Linker,程序集链接器),该命令能够将 A.netmodule 和 B.netmodule 

 

组合到程序集中。这样,最终会生成 Hello.dll 这个主模块文件,该文件将仅包含程序集清单。在这个

 

程序集清单中,文件列表的内容变成了三个:A.netmodule,B.netmodule 和 Hello.dll。

 

 

多文件程序集不仅生成麻烦,而且应用似乎也不是很广泛,因为对于CLR来说,它只认识程序集,所以部

 

署的时候,都是以程序集作为最小单位。一旦某个“原始”模块发生了改变,整个程序集都必须重新生成

 

。另外,只有程序集有版本,模块作为程序集的组成部分,不能被版本化。

 

【Unity】程序集 程序集是什么呢?主要介绍了程序集及其使用方法。 阅读详情

相关推荐

HFSS学习记录——0. HFSS软件安装(ANSYS Electromagnetics Suite 2023 R1)

HFSS 2023 R1安装步骤

plmxu34的博客 15万+

警告:没有一个已生成的程序包含要从中继承的组件.....以及程序集加载错误。解决方案

引言 最近在机房收费系统重构的过程中,需要创建父窗体和子窗体,应用模板方法,对代码进行封装、继承。达到代码的重用,体现的是面向对象的思想。可万万没想到的是,我在创建父窗体和子窗体的时候遇到了很大的麻烦。从早上忙到晚上,而且还是在很多的师哥师姐的帮忙下才最终解决了这个问题。下面我就来分享给大家。 问题 步骤一、我们创建子窗体的过程如下: 步骤二:正常情况下我们点击添加一切都会万事大吉,可没想...

王华春_Jason 1706

走马观碑组智能车竞赛:目标板识别算法优化与实战技巧(基于OpenCV)

本文针对智能车竞赛走马观碑组别的核心挑战,深入探讨了基于OpenCV的目标板识别算法优化与实战技巧。文章系统分析了PVC赛道环境下的光照、运动模糊等干扰因素,详细拆解了从红色矩形定位、透视校正到特征提取与分类的完整流程,并提供了工程优化、速度提升及现场调试的实用策略,旨在帮助参赛队伍构建一套在高速运动中既准又快的鲁棒识别系统。

life6的博客 732

C++11并发与多线程笔记(2) 线程启动、结束,创建线程多法、join,detach

第二节 线程启动、结束,创建线程多法、join,detach 一、范例演示线程运行的开始 程序运行起来,生成一个进程,该进程所属的主线程开始自动运行;当主线程从main()函数返回,则整个进程执行完毕 主线程从main()开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,线程也结束运行 整个进程是否执行完毕的标志是:主线程是否执行完,如果主线程执行完毕了,就代表整个进程执行完毕了,此时如果其他子线程还没有执行完,也会被强行终止【此条有例外,以后会解释】 创建

qq_38231713的博客 1万+

Surface Pro 4/5/6/7保姆级黑苹果安装:从Windows分区到OC引导配置全流程(含EFI文件替换避坑)

本文详细介绍了在Surface Pro 4/5/6/7上安装黑苹果的全流程,包括Windows分区、OC引导配置和EFI文件替换等关键步骤。通过实战经验分享,帮助用户避开常见陷阱,实现Windows与macOS双系统完美共存,特别适合对黑苹果安装感兴趣的Surface Pro用户。

weixin_30300225的博客 1369

什么是程序集?

程序集是 .NET 框架应用程序的主要构造块。它是一个功能集合,并以单个实现单元(一个或多个文件)的形式生成、版本化和部署。所有托管类型和资源或者只在其实现单元中标记为可访问,或者在该单元外由代码标记为可访问。 程序集通过其清单(每个程序集不可缺少的部分)进行自我描述。清单可以: www.w3sky.com 建立程序集标识(以文本名称的形式)、版本、区域性和数字签名(如果程序集将在应用程序间共享)

1万+

【图像拼接】论文精读:As-Rigid-As-Possible Shape Manipulation(ARAP)

文章目录前言1.摘要2.算法的总体流程总结 前言 图像变形算法 1.摘要 论文提出了一个二维图形互动系统。图形是建立在三角形网格上的,用户只需移动几个网格顶点(限制顶点),系统通过最小化每个三角形的误差计算网格剩余顶点(自由顶点)的位置。 算法分两步: 适当旋转每个三角形。 调整大小。 关键是使用二次度量误差将最小化问题转换成线性方程组,然后再解这个方程组。 刚性形状变形是很难的,论文的研究使其变得简单。 2.算法的总体流程 总的流程分三步: 将图形用三角形网格覆盖 选择三个点(限制顶点) 操纵限

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 15万+

【vb.net机房收费系统】之没有包含要从继承的组件的已生成程序集 ...

在敲到组合查询这个功能的时候,需要用到窗体的继承,但是在新建继承窗体的时候,出现了错误(没有包含要从继承的组件的已生成程序集)。如下图: 问题的产生:当时没怎么注意,也不知道怎么弄的,最后反正是继承上了,结果今天手贱清理了一下系统垃圾,就出了这么个错误“文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FrmXXX.vb ---...

weixin_34126557的博客 188

把 SAP GUI 做成可维护的应用:Module Pool 基础与 Table Control 深入实战

SAP Module Pool 与 Table Control 开发要点 摘要:Module Pool 作为 SAP GUI 交互的核心技术,由程序、屏幕(Dynpro)和流逻辑(Flow Logic)组成,通过 PBO/PAI 事件驱动数据流。Table Control 是其中处理多行数据的核心控件,其开发关键在于: 正确理解 PBO/PAI 数据流机制 掌握 CXTAB_CONTROL 结构的关键属性(LINES、TOP_LINE 等) 合理设置列控制属性(CXTAB_COLUMN) 采用 LOOP W

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 241

MATLAB算法实战应用案例精讲-【数模应用】校准曲线(附MATLAB、python和R语言代码实现)

模型校准曲线(Calibration Curve),也称为可靠性曲线(Reliability Curve)或概率校准曲线(Probability Calibration Curve),是一种评估分类模型输出概率准确性的图形工具。它可以帮助我们理解模型的预测概率是否与实际标签的分布一致。校准曲线通常包括以下步骤:计算模型预测概率:对于测试集中的每个样本,模型会输出一个概率值,表示样本属于正类的概率。将数据分桶:将这些概率值分成若干个等宽的桶(例如10个桶),每个桶中的样本具有相似的预测概率。

qq_36130719的博客 557

程序运行过程中动态生成程序集和类

/生成 Microsoft 中间语言 (MSIL) 指令。//要求根据assemblyClassJson生成的类要集成BridgeBusiness.GZW类。//完成将partss、elevations、assemblyClassJson组合称一个类并反序列化。//动态创建类MyClass。//使用动态类创建类型。//动态创建构造函数。4.创建动态类的实例,并对字段和属性赋值。2向动态类中添加字段和属性。

u010472977的博客 174

黑猫带你学UFS协议第12篇:UFS标志(Flags)和属性(Atrributes)详解

UFS中的标志其实就是一些开关,布尔型,非0即1,打开或者关闭。这些标志可以用来使能或者禁止UFS设备的一些功能、模式或者状态。 简单来说,flag和attribute、discriptor一样,都是ufs的寄存器罢了。只不过spec将这些寄存器分类了,分成这三种大的类型了而已。 标志可以被清除、复位、设置、触发、读。 主机也是通过设备管理器的Query Request UPIU来读取或者写标志。

黑猫奥利奥的博客 2083

Error MC1000 : 未知的生成错误“因为没有预加载,所以无法解析程序集“Microsoft.Windows.Design.Extensibility, Version=4.3.1.0

当遇到因为没有预加载,所以无法解析程序集“Microsoft.Windows.Design.Extensibility, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的依赖项时,应检查项目引用。

逆流而上的技术学习,真诚携手共进之陪伴的博客 412

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

错误 341 “sgen.exe”已退出,代码为 1

编译的时候有时会遇到“341 “sgen.exe”已退出,代码为 1”错误  解决方法就是 选定当前编译的项目,右键选择“属性”—“生成”,将“生成序列化程序集”设成“关闭”

querystringcom的专栏 3113

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

.NET框架程序设计--生成,打包,部署及管理应用程序与类型(1:程序集的PE格式)

.NET框架程序设计--生成,打包,部署及管理应用程序与类型(1:程序集的PE格式)(一).NET框架部署的目标提到Microsoft的OS--Windows,也许很多人立刻想到了她的复杂以及不稳定性,一个重大的原来是因为运行在Windows上各种程序都难以避免的DllHell(DLL地狱)问题,还有安装程序的复杂过程,以及程序对客户的不透明性,使得程序可以潜在地执行破环代码,修改注册表,发送客户...

weixin_34161064的博客 94

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程

是因为有技术上的限制吗?并对下面的 Teradata.Client.Entity.dll 友元(就是这个程序集里面的内部类对友元程序集可见,Teradata.Client.Provider.dll 里面的内部类对 Teradata.Client.Entity.dll 可见)。引用 Teradata.Client.Provider.dll。1.反编译 Teradata.Client.Provider.dll ,拿到源码,去掉对 Teradata.Client.Entity.dll 的强命名友元,然后编译。

xjVt7Grvm的博客 228

Win32程序如何调用.net DLL

1、建立:DotNetFunc.cs 封装要使用的Function、Procedure。2、生成密钥文件,用于给程序集强名称签名sn -k key.snk 3、使用强名称签名,编译成类库csc /t:library DotNetFunc.cs 4、生成类型库tlbexp DotNetFunc.dll /out:DotNetFunc.tlb 5、注册dllregasm DotNetFunc.dll 6、移入gac全局程序集缓存gacutil -i DotNetFunc.dll 

木桌的技术博客 952

找不到从属程序集 Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win3...

“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\webservice\396619ef\64fa1a2a\assembly\dl3\d8aa258e\ea6ee7cd_64f0d001\System.Data.SQLite.dll”的激活上下文生成失败。 找不到从属程序集 Microsoft.VC90.C...

weixin_30367945的博客 6306

编译.NET程序自动产生版本号的规则

本文介绍如何让程序集在每次编译时自动产生不同的版本号, 有的时候我们可能不光需要知道程序集的编译版本,还可能需要 知道关于编译的更详细的信息,比如大概编译的时间等。 那么怎么做呢,难道需要每次编译时都要改版本号吗, .net提供了一个简单的方法,把版本号如下这样设置就可以了。 [assembly: AssemblyVersion("1.0.*")] 前两位的主版本号和次版本号根据需...

weixin_30702887的博客 142

自动获得程序及的编译时间

/// <summary> /// 获得程序集的编译时间/// 生成和修订版本号必须是自动生成的/// AssemblyInfo里的写法应该为1.0之后为.* /// [assembly: AssemblyVersion("1.0.*")] /// </summary>...

a21994的博客 450

UserControl 的一个值得注意的问题 [属性" * "的代码生成失败.错误是:"程序集"*.Version=1.0.0.0,Culture=neutral,..........无标记为序列化"

UserControl 的一个值得注意的问题 [属性" * "的代码生成失败.错误是:"程序集"*.Version=1.0.0.0,Culture=neutral,..........无标记为序列化" 原创wxm3630478 发布于2009-06-24 16:54:00 阅读数 9101 收藏 展开 开发时在做UserControl,需要注意的List<>集合问题~~~! 其他类...

cxu123321的博客 413
上一篇: 如何教大家正确统计表的行数
下一篇: switch..case
tolearner
博客等级 码龄18年 128粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值