标题:如何理解 - 程序集?
只看楼主
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
结帖率:91.67%
已结贴  问题点数:20 回复次数:13 
如何理解 - 程序集?
在网上搜了很多关于 程序集 的介绍,可还是没有搞明白。

我现在的理解是:在VS里搞定了“解决方案”后,生成“应用程序”后,自然产生了 ".exe"文件,这个 ".exe"文件就是程序集,这个".exe"文件 将“解决方案”的源代码 编译成 二进制的代码汇集在了".exe"文件里面,成为了用户直接拿来使用的“应用程序”。

我的理解对吗?

哪位老师大侠 用 通俗的话 指导一下?谢谢啦!!!
搜索更多相关主题的帖子: 应用程序 解决方案 如何 解决方案 应用程序 源代码 二进制 
2012-06-15 21:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:9 
这是比较直观的理解,初学者不妨这样理解,随着学习和实践的深入,才能慢慢领悟这个概念。程序集是一个很抽象的逻辑概念,是用于解决某个问题所需的资源集合,随着问题规模和形式的不同,相应的组件和资源也不一样,但只要逻辑上是为解决这个问题服务的,就归入这个项目的程序集中。所谓的重用,是指某个程序集中的组件(托管模块)既可用于此项目,又可用于彼项目,最理想的组件当然是通用模块了,就如.NET提供的类库那样。

当你编写一个小型的程序,可以把自己写的代码和资源归总到一个存在形式为.EXE或.DLL的文件中,这仅仅是程序集中的组件之一,因为在.NET框架下,程序的运行还需要.NET运行时调动各种.DLL支持,这些需要用到的东西的总和,才是这个项目的程序集。程序集有一份清单,记录需要使用的托管模块和资源,那里列出的才是全部东西。狭隘地说,如果你的单个.EXE程序只使用共用类库,也可以说这个.EXE文件是一个独立的程序集。这都是逻辑上而言的,对现在的你而言,这个问题其实不大重要。

授人以渔,不授人以鱼。
2012-06-15 23:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:1 
以下是微软的说法:


公共语言运行时中的程序集  

程序集是 .NET Framework 应用程序的构造块;程序集构成了部署、版本控制、重复使用、激活范围控制和安全权限的基本单元。
程序集是为协同工作而生成的类型和资源的集合,这些类型和资源构成了一个逻辑功能单元。
程序集向公共语言运行时提供了解类型实现所需要的信息。
对于运行时,类型不存在于程序集上下文之外。


程序集执行以下功能:


包含公共语言运行时执行的代码。
如果可迁移可执行 (PE) 文件没有相关联的程序集清单,则将不执行该文件中的 Microsoft 中间语言 (MSIL) 代码。
请注意,每个程序集只能有一个入口点(即 DllMain、 WinMain 或 Main)。


程序集形成安全边界。
程序集就是在其中请求和授予权限的单元。
有关应用于程序集的安全边界的更多信息,请参见 程序集安全注意事项。


程序集形成类型边界。
每一类型的标识均包括该类型所驻留的程序集的名称。
在一个程序集范围内加载的 MyType 类型不同于在其他程序集范围内加载的 MyType 类型。


程序集形成引用范围边界。
程序集的清单包含用于解析类型和满足资源请求的程序集元数据。
它指定在该程序集之外公开的类型和资源。
该清单还枚举它所依赖的其他程序集。


程序集形成版本边界。
程序集是公共语言运行时中最小的可版本化单元,同一程序集中的所有类型和资源均会被版本化为一个单元。
程序集的清单描述您为任何依赖项程序集所指定的版本依赖性。
有关版本控制的更多信息,请参见 程序集版本控制。


程序集形成部署单元。
当一个应用程序启动时,只有该应用程序最初调用的程序集必须存在。
其他程序集(例如本地化资源和包含实用工具类的程序集)可以按需检索。
这就使应用程序在第一次下载时保持精简。
有关部署程序集的更多信息,请参见 部署应用程序。


程序集是支持并行执行的单元。
有关运行多个程序集版本的更多信息,请参见 程序集和并行执行。


程序集可以是静态的或动态的。
静态程序集可以包括 .NET Framework 类型(接口和类),以及该程序集的资源(位图、JPEG 文件、资源文件等)。
静态程序集存储在磁盘上的可迁移可执行 (PE) 文件中。
您还可以使用 .NET Framework 来创建动态程序集,动态程序集直接从内存运行并且在执行前不存储到磁盘上。
您可以在执行动态程序集后将它们保存在磁盘上。


有几种创建程序集的方法。
您可以使用过去用来创建 .dll 或 .exe 文件的开发工具,例如 Visual Studio 2005。
您可以使用 Windows 软件开发包 (SDK) 中提供的工具来创建带有在其他开发环境中创建的模块的程序集。
您还可以使用公共语言运行时 API(例如 Reflection.Emit)来创建动态程序集。


授人以渔,不授人以鱼。
2012-06-16 00:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:1 




[ 本帖最后由 TonyDeng 于 2012-6-16 00:19 编辑 ]

授人以渔,不授人以鱼。
2012-06-16 00:15
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
万分感谢 TonyDeng 老师 的全面详尽而且通俗易懂地介绍程序集!!!

感觉豁然开朗了。

再请教您:

1.市场出售的商业软件,是否就是“程序集”(比如:用友财务软件)?
2. “源代码 ”指的是我们用VS编写程序的“解决方案”(即:还未生成应用程序,或生成应用程序之前的代码)?

谢谢您!
2012-06-17 10:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:9 
程序集具有“组件”、“构件”的性质(后面两个名称也是assembly的另外译名,但权威的译名是程序集),所以,只有能够或被用于新的解决方案的东西,才能被算作新解决方案的程序集。一般的商业软件,如果不是专门做组件、控件类的,而是自成体系做应用的,就很难成为程序集了。

“源代码”通常是按你这样理解,但C#由于可以生成动态程序集,这样的分界变模糊了。.NET是基于中间语言CIL的,对这种概念不再刻意区分了,不必过多研究。

授人以渔,不授人以鱼。
2012-06-17 11:39
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
感谢 TonyDeng 老师的指导帮助!!!

请教 如何 发 截图??

[ 本帖最后由 learnerok 于 2012-6-18 16:32 编辑 ]
2012-06-18 16:24
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
回复的时候添加附件就行了。附件不要超过5MB

我们都在路上。。。。。
2012-06-19 11:02
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
回复 8楼 hellovfp
谢谢 hellovfp老师!

你指的是编辑菜单上最右边的 黄色 带有曲别针的文件夹样子的图标吗?
我点按没有反应啊。
2012-06-19 12:31
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
不会吧?你的浏览器和我们的不一样?
点了会弹出一个文件选择对话框的。
但最好是点帖子上的回复,如果在最下面的快速回复会出现帖不上图的问题,可能是论坛的Bug.

我们都在路上。。。。。
2012-06-19 12:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371623-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051489 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved