2.4.3 为程序集添加资源文件
2011-11-22 22:45 iRead 阅读(451) 评论(0) 编辑 收藏 举报使用AL.exe来创建程序集时,可将某个文件作为资源添加到程序集中,这是用/embed[resource]开关来实现的。这个开关获取一个文件(可为任意文件),并将文件的内容嵌入最终的PE文件。清单的ManifestResourceDef表会相应更新,以反映出资源的存在。
AL.exe还支持一个/link[resource]开关,它也能获取包含资源的一个文件。然而,/link[resource]开关会只是更新清单的ManifestResourceDef和FileDef表,指出资源的存在,并指出资源包含在程序集的哪个文件。资源文件不会嵌入程序集PE文件;相反,它会保持独立,并且必须和其他程序集文件一起打包和部署。
与AL.exe相似,C#编译器CSC.exe也允许将资源合并到编译器生成的程序集中。编译器的/resource开关能将指定的资源文件嵌入最终生成的程序集PE文件中,并更新ManifestResourceDef表。编译器的/linkresource开关将在ManifestResourceDef和FileDef清单表中添加一个记录项,以引用独立存在的资源文件。
关于资源,最后要注意一点:可以在程序集中嵌入标准的Win32资源。为此,只需在使用AL.exe或者CSC.exe时,使用/win32res开关来指定一个.res文件的路径名。除此之外,还可以在使用AL.exe或者CSC.exe时,使用/win32icon开关来指定一个.ico文件的路径名,从而将一个标准的Win32图标资源快速、简单地嵌入程序集中。为了在Visual Studio中奖资源文件添加到程序集中,可以显示项目的属性,然后在“应用程序”选项卡中添加资源文件。嵌入图标之后,Windows资源管理器就能为托管的可执行文件显示一个有特色的图标。
注意:托管的程序集文件还包含Win32清单资源信息。C#编译器默认将生成这种清单信息,但使用/nowin32manifest开关,即可告诉它不要生成。C#编译器生成的默认清单是下面这样的:
<?xml version="1.0" encoding="utf-8"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestPrivileges> </security> </trustInfo> </assembly>
返回目录