摘要:2.8节“简单管理控制(配置)”简要讨论了管理员如何影响“CLR搜索和绑定程序集的方式”。在那一节中,我们演示了如何将引用的一个程序集的文件移动到应用程序基目录的一个子目录中,以及CLR如何通过应用程序的XML配置文件来定位移动的文件。 第2章只讨论了probling元素的privatePath属性,本节准备讨论其他XML配置文件元素。以下是一个XML配置文件示例:<?xml version="1.0" encoding="utf-8" ?><configuration> <runtime> <assemblyB 阅读全文
3.1 两种程序集,两种部署
2011-11-28 11:32 by iRead, 265 阅读, 0 推荐, 收藏, 编辑
摘要:CLR支持两种程序集:弱命名程序集(weakly named assembly)和强命名程序集(strongly named assembly)。重要提示:任何.NET Framework文档中都找不到“弱命名程序集”这个术语,这是我自造的一个术语。事实上,文档中没有相应的专业术语来表示一个弱命名的程序集。通过自造一个术语,我在说到不同种类的程序集时就不会产生任何歧义。 弱命名程序集和强命名程序集在结构上完全一致。也就是说,它们使用的是和第1章和第2章讨论的相同的PE文件格式、PE32(+)头、元数据、清单表以及IL。生成它们的工具也是相同的,都是C#编译器或者AL.exe。两者真正的区... 阅读全文
第3章 共享程序集和强命名程序集
2011-11-25 15:07 by iRead, 250 阅读, 0 推荐, 收藏, 编辑
摘要:本章内容:两种程序集,两种部署为程序集分配强名称全局程序集缓存在生成的程序集中引用一个强命名程序集强命名程序集能防范篡改延迟签名私有部署强命名程序集“运行时”如何解析类型引用高级管理控制(配置) 第2章讲述了生成、打包和部署一个程序集所需的步骤。我将重点放在所谓的私有部署(private deployment)上。进行私有部署时,程序集是放在应用程序的基目录(或者它的一个子目录)中的,是这个应用程序专用的。以私有方式部署程序集,可以对程序集的命名、版本和行为进行最全面的控制。 本章的重点是如何创建可由多个应用程序访问的程序集。Microsoft.Net Framework配套提供的程序集就.. 阅读全文
2.8 简单管理控制(配置)
2011-11-25 14:21 by iRead, 274 阅读, 0 推荐, 收藏, 编辑
摘要:用户或管理员经常需要对应用程序执行时的一些方面进行控制。例如,管理员可能决定移动用户硬盘上的程序集文件,或者覆盖程序集清单中的一些信息。还有一些策略设计版本控制,详情请参见第3章。 为了实现对一个应用程序的管理控制,可在应用程序目录中放入一个配置文件。应用程序的发布者可创建并打包这个文件。这样一来,安装程序会将配置文件安装到应用程序的基目录中。另外,计算机管理员或最终用户也能创建或修改该文件。CLR会解析该文件的内容,从而更改程序集文件的定位和加载策略。 配置文件包含的是XML代码,它既能和某个应用程序关联,也能和整个机器关联。通过使用一个单独的文件(而不是注册表设置),用户可以方便地... 阅读全文
2.7 简单应用程序部署(私有部署的程序集)
2011-11-25 14:00 by iRead, 553 阅读, 0 推荐, 收藏, 编辑
摘要:本章已解释了如何生成模块,以及如何将模块合并成一个程序集。接着要解释的是如何打包和部署所有这些程序集,使用户能够运行应用程序。 程序集的打包方式没有任何特殊要求。打包一组程序集最简单的方式就是直接复制所有文件。例如,可将所有程序集文件放到一张光盘上,将光盘分发给用户,执行上面的一个批处理文件,将光盘上的文件复制到用户硬盘上的一个目录。由于已经包含了所有依赖的程序集和类型,所以用户能直接运行应用程序,“运行时”会在应用程序的目录中查找引用的程序集。不需要对注册表进行任何修改就能运行程序。要卸载应用程序,删除所有文件就可以了--就是那么简单! 当然,也可使用其他机制来打包和安装程序集文件,... 阅读全文
2.6 语言文化
2011-11-24 14:26 by iRead, 319 阅读, 0 推荐, 收藏, 编辑
摘要:除了版本号之外,程序集还将语言文化(culture)作为其身份标识的一部分。例如,我们可能有一个程序集是只面向德语用户的,另一个程序集是只面向瑞士德语用户的,第三个程序集是只面向美国英语用户的,以此类推。语言文化是用一个字符串来标识的,该字符串包含一个主标记和一个副标记(根据RFC1766)。表2-6展示了一些例子。 表2-6 程序集语言文化标记的例子主标记副标记语言文化de(无)德语deAT奥地利德语deCH瑞士德语de(无)英语deGB英国英语deUS美国英语 通常,在创建包含代码的一个程序集时,不会为其指定一种语言文化。这是因为代码只讲“逻辑”,一般不涉及语言文化所特有的东西。没... 阅读全文
2.5.1 版本号
2011-11-24 14:05 by iRead, 262 阅读, 0 推荐, 收藏, 编辑
摘要:上一节指出可以将几个版本号应用于一个程序集。所有这些版本号都具有相同的格式,每个都由4个以句点分隔的部分构成,如表2-5所示。 表2-5 版本号格式major(主版本号)minor(次版本号)build(内部版本号)revision(修订号)示例257192 表2-5展示了一个示例版本号:2.5.719.2。前两个编号构成了公众对一个版本的理解。公众会将这个例子看成是程序集的2.5版本。第三个编号719是程序集的build号。如果公司每天都要生成程序集,那么每天都应该递增这个build号。最后一个2指出当前build的修订次数。如果因为某个原因,公司某一天必须生成两次程序集(可能是为了... 阅读全文
2.5 程序集版本资源信息
2011-11-24 13:38 by iRead, 1823 阅读, 0 推荐, 收藏, 编辑
摘要:AL.exe或CSC.exe生成一个PE文件程序集时,还会在PE文件中嵌入一个标准的Win32版本资源。用户可以查看文件的属性来检查这个资源。在应用程序代码中,可以调用System.Diagnostics.FileVersionInfo的static方法GetVersionInfo来获取并检查这些信息。图2-4显示的是JeffType.dll属性对话框的“详细信息”选项卡。图2-4 “JeffTypes.dll属性”对话框的“详细信息”选项卡 生成程序集时,应该使用一些定制attribute来设置版本资源文件,这些attribute是在源代码中应用于assembly这一级别的。图2-4的... 阅读全文
2.4.3 为程序集添加资源文件
2011-11-22 22:45 by iRead, 451 阅读, 0 推荐, 收藏, 编辑
摘要:使用AL.exe来创建程序集时,可将某个文件作为资源添加到程序集中,这是用/embed[resource]开关来实现的。这个开关获取一个文件(可为任意文件),并将文件的内容嵌入最终的PE文件。清单的ManifestResourceDef表会相应更新,以反映出资源的存在。 AL.exe还支持一个/link[resource]开关,它也能获取包含资源的一个文件。然而,/link[resource]开关会只是更新清单的ManifestResourceDef和FileDef表,指出资源的存在,并指出资源包含在程序集的哪个文件。资源文件不会嵌入程序集PE文件;相反,它会保持独立,并且必须和其他程序... 阅读全文
2.4.2 使用程序集链接器
2011-11-22 21:30 by iRead, 391 阅读, 0 推荐, 收藏, 编辑
摘要:除了使用C#编译器,还可以使用“程序集链接器”使用程序AL.exe来创建程序集。如果要在创建的程序集中包含用不同编译器生成的模块(而且这些编译器不支持与C#编译器的/addmodule开关等价的机制),或者在生成时不清楚程序集的打包要求,那么程序集链接器就显得相当有用。还可用AL.exe来生成只含资源的程序集,也就是所谓的附属程序集(satellite assembly),它们通常用于本地化。本章稍后 会讨论附属程序集的问题。 AL.exe实用程序可生成一个EXE文件或者DLL PE文件(其中只包含对其他模块中的类型进行描述的一个清单)。为了理解AL.exe的工作原理,让我们改变一下Je... 阅读全文