• 内容部分

作者:admin 2018-10-12 20:28 浏览

程序集可以包含一个或多个文件。代码文件被称为模块。程序集可以包含多个代码模块。由于可以使用不同的语言来创建代码模块,因此使用几种不同的语言来创建程序集在技术上是可行的。但Visual Studio不支持在一个程序集中使用不同的语言。 CIL代码将字符串加载到堆栈上,然后调用WriteLine函数并返回。 一般来说,组件应该包含文化中立资源。如果你想本地化你的程序集(例如对不同的语言环境使用不同的字符串),你应该使用卫星程序集 - 特殊的资源专用程序集。顾名思义,卫星与称为主组件的组件相关联。该程序集(比如lib.dll)将包含中性资源(微软称这是国际英语,但暗示为美国英语)。每个卫星都具有附加.resources的相关库的名称(例如lib.resources.dll)。该卫星被赋予非中性文化名称,但由于现有的Windows文件系统(FAT32和NTFS)忽略了这一点,这意味着在一个文件夹中可能有多个具有相同PE名称的文件。由于这是不可能的,卫星必须存储在应用程序文件夹下的子文件夹中。例如,具有英国英语资源的卫星的CLI名称将为lib.resources.dll的PE文件名,其名称为“lib.resources Version = 0.0.0.0 Culture = en-GB PublicKeyToken = null”,并且将被存储在名为en-GB的子文件夹中。 可以通过使用C#编译器的/ reference标志来引用可执行代码库。 CLI代码还可以执行Linked Demand以获取调用堆栈的许可权。在这种情况下,CLR只会在指定权限的TOP位置查看调用堆栈中的一个方法。这里栈走查绑定到调用堆栈中的一个方法,CLR假定CALL STACK中的所有其他方法都具有指定的权限。该程序集是METADATA和MSIL文件的组合。 什么是.net程序集 CLI程序集可以拥有版本信息,从而可以消除由共享程序集引起的应用程序之间的大部分冲突。[2]但是,这并不能消除程序集之间所有可能的版本冲突。[3] 由Microsoft定义用于最新版本的Windows,公共语言基础结构(CLI)中的程序集是用于部署,版本控制和安全性的编译代码库。有两种类型:进程程序集(EXE)和库程序集(DLL)。进程程序集表示一个使用库程序集中定义的类的进程。 CLI程序集包含CIL中的代码,通常由CLI语言生成,然后在运行时由即时编译器编译为机器语言。在.NET Framework实现中,此编译器是公共语言运行时(CLR)的一部分。 程序集由CIL代码构建,CIL代码是一种中间语言。该框架在内部将CIL [字节码]转换为本地汇编代码。如果我们有一个打印“Hello World”的程序,则该方法的等效CIL代码是: 卫星由称为System.Resources.ResourceManager的CLI类加载。开发人员必须提供资源的名称和有关主要组件的信息(使用中立资源)。 ResourceManager类将读取机器的语言环境,并使用此信息和主程序集的名称来获取卫星的名称和包含它的子文件夹的名称。 ResourceManager然后可以加载卫星并获得本地化资源。 CLI代码可以执行代码访问安全需求。这意味着只有调用堆栈中所有方法的所有程序集都具有指定权限时,代码才会执行​​某些特权操作。如果一个程序集没有权限,则会引发安全异常。 为了防止欺骗攻击,如果一个破解者试图将一个程序集看作别的东西,程序集就用一个私钥进行签名。预计装配的开发人员保密私钥,因此黑客无法访问它,也不能简单地猜测它。因此,破解者不能让他的程序集冒充别的东西,在改变之后缺少正确签名的可能性。对程序集签名包括对程序集的重要部分进行散列,然后使用私钥对散列进行加密。签名散列与公钥一起存储在程序集中。公钥将解密已签名的散列。当CLR加载一个强命名的程序集时,它将从程序集生成一个哈希,然后将其与解密的哈希进行比较。如果比较成功,则意味着文件中的公钥(以及公钥标记)与用于签署程序集的私钥相关联。这将意味着程序集中的公钥是程序集发布者的公钥,因此防止了欺骗攻击。 CLI代码访问安全性基于程序集和证据。证据可以是从装配中推导出的任何东西,但通常是从装配源创建的 - 无论装配是从互联网,内联网下载还是安装在本地机器上(如果装配是从其他机器下载的,它将存储在GAC中的沙盒位置,因此不被视为在本地安装)。权限应用于整个程序集,程序集可以通过自定义属性指定它需要的最小权限(请参阅CLI元数据)。装载程序集时,CLR将使用程序集的证据创建一个或多个代码访问权限的权限集。然后,CLR将检查以确保此权限集包含程序集指定的必需权限。 程序集的名称由四部分组成 公钥标记用于使程序集名称唯一。因此,两个强大的命名程序集可以具有相同的PE文件名,但CLI会将它们识别为不同的程序集。 Windows文件系统(FAT32和NTFS)只能识别PE文件名,因此具有相同PE文件名(但文化,版本或公钥令牌不同)的两个程序集不能存在于同一个Windows文件夹中。为了解决此问题,CLI引入了GAC(全局程序集缓存),该程序在运行时被视为单个文件夹,但实际上是使用嵌套文件系统文件夹实现的。 共享程序集需要提供一个强名称来唯一标识可能在应用程序之间共享的程序集。强大的命名由公钥令牌,文化,版本和PE文件名组成。如果一个程序集很可能用于共享程序集的开发目的,强命名程序只包含公钥生成。此时不生成私钥。它仅在组件部署时生成。


  • 上一篇:没有了
  • 下一篇:大使_

Powered by 迅达娱乐 @2018 RSS地图 html地图

Copyright 365建站 © 2012-2013 365建站器 版权所有