【C#程序集】程序集

.net 程序集的组成:

程序集由元数据、清单、il 、资源

 

 

 

.net程序集名称

强名称程序集有一个完全限定的名称,由程序集的名称、区域性、公钥、版本号以及(可选)处理器体系结构组成。 使用 FullName 属性来获取已加载程序集的完全限定名称,该名称通常称为显示名称。

运行时使用此名称信息来定位程序集并将其同其他同名的程序集区分开。 例如,名为 myTypes 的强名称程序集可以具有下列完全限定名:

myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil
在此例中,完全限定名称表明 myTypes 程序集的强名称具有公钥标记、区域性值为美国英语、版本号为 1.0.1234.0。 它的处理器体系结构为 msil,表示程序集将以实时 (JIT) 方式编译为 32 位代码或 64 位代码(具体取决于操作系统和处理器)。
ProcessorArchitecture=msil处理器体系结构对于强名称不是必需的

请求程序集中的类型的代码必须使用完全限定的程序集名称。 这称为完全限定绑定。 在 .NET Framework 中引用程序集时不允许使用部分绑定,因为它只指定一个程序集名称。
备注

绑定到程序集时,运行时不区分程序集名称的大小写,但会保留程序集名称中使用的大小写。 Windows SDK 中的几个工具会区分程序集名称的大小写。 为获得最佳效果,管理程序集名称时请按区分大小写的方式来处理。

详细的内容:https://docs.microsoft.com/zh-cn/dotnet/standard/assembly/file-format

命名应用程序组件

运行时在确定程序集的标识时不考虑文件名。 程序集标识(由程序集名称、版本、区域性和强名称组成)对运行时必须清楚明了。

例如,如果一个名为 myAssembly.exe 的程序集引用一个名为 myAssembly.dll 的程序集,则在执行 myAssembly.exe 时会正确进行绑定 。 但是,如果另一个应用程序使用 AppDomain.ExecuteAssembly 方法执行 myAssembly.exe,则当 myAssembly.exe 请求绑定到 myAssembly 时,运行时会确定 myAssembly 已经加载 。 在这种情况下,不会加载 myAssembly.dll。 由于 myAssembly.exe 不包含请求的类型,因此会发生 TypeLoadException

为避免这个问题,请确保组成应用程序的程序集具有不同的程序集名称,或者将名称相同的程序集放在不同的目录中。

备注

在 .NET Framework 中,如果将强名称程序集置于全局程序集缓存中,则程序集的文件名必须与程序集名称相匹配,不包括文件扩展名,如 .exe 或 .dll 。 例如,如果程序集的文件名为 myAssembly.dll,则程序集名称必须为 myAssembly。 只有在根应用程序目录中部署的专用程序集的程序集名称可以不同于文件名。

注意

程序集名称不等于程序集的文件名。

 

.net 程序集分类:

引用程序集:是仅元数据程序集的扩展。这个程序集里面放的程序集的接口,没有具体的实现

实现程序集:就是我们通常编译生成的dll 或者 exe文件

 



posted @ 2021-10-30 16:41  小林野夫  阅读(308)  评论(0编辑  收藏  举报
原文链接:https://www.cnblogs.com/cdaniu/