Visual Basic 中的全局属性
更新:2007 年 11 月
大多数属性都附加到特定语言元素(如类或方法)。但是,有些属性是全局属性,它们可以应用于整个程序集或模块。
您可以通过“程序集信息”对话框设置 Visual Studio 集成开发环境 (IDE) 中的许多属性。有关更多信息,请参见 管理应用程序属性 和 管理程序集签名和清单签名。
程序集属性
使用以下语法,可以指定程序集级属性:
<Assembly: Attribute1, Assembly: Attribute2..., Assembly: AttributeN>
使用类似语法,可以指定模块级属性:
<Module: Attribute1, Module: Attribute2..., Module: AttributeN>
在源代码中,全局属性添加到所有顶级指令(如 Option Explicit 和 Imports 语句)之后、所有类型或命名空间声明之前。全局属性可以出现在一个项目的多个源文件中,但它们通常放在与 Visual Basic 项目一起自动创建的 AssemblyInfo.vb 文件中。
程序集属性是提供程序集相关信息的值。它们分成以下类别:
程序集标识属性
信息性属性
程序集清单属性
强名称属性
程序集标识属性
三个属性(如果适用,还有强名称)可确定程序集的标识:名称、版本和区域性。这些属性构成程序集的完整名称,并且在代码中引用程序集时需要这些属性。可以使用属性来设置程序集的版本和区域性。但是,名称值由编译器、“程序集信息”对话框中的 Visual Studio IDE 或程序集链接器 (Al.exe) 在创建程序集时根据包含程序集清单的文件进行设置。AssemblyFlagsAttribute 属性指定程序集的多份副本是否可以共存。
下表显示标识属性:
属性 |
用途 |
---|---|
详细描述程序集的标识。 |
|
指定程序集的版本。 |
|
指定程序集支持哪个区域性。 |
|
指定程序集是否支持在同一台计算机上、同一进程中或同一应用程序域中并行执行。 |
下面的代码向程序集应用版本和区域性属性:
'Set version number for assembly.
<Assembly: Reflection.AssemblyVersionAttribute("4.3.2.1")>
'Set culture as German.
<Assembly: Reflection.AssemblyCultureAttribute("de")>
信息性属性
您可以使用信息性属性为程序集提供其他的公司或产品信息。下表显示在 System.Reflection 命名空间中定义的信息性属性。
属性 |
用途 |
---|---|
定义为程序集清单指定产品名称的自定义属性。 |
|
定义为程序集清单指定商标的自定义属性。 |
|
定义为程序集清单指定信息性版本的自定义属性。 |
|
定义为程序集清单指定公司名称的自定义属性。 |
|
定义为程序集清单指定版权的自定义属性。 |
|
指示编译器使用 Win32 文件版本资源的特定版本号。 |
|
指示程序集是否符合公共语言规范 (CLS)。 |
程序集清单属性
可以使用程序集清单属性提供程序集清单中的信息。其中包括标题、说明、默认别名和配置。下表显示在 System.Reflection 命名空间中定义的程序集清单属性。
属性 |
用途 |
---|---|
定义为程序集清单指定程序集标题的自定义属性。 |
|
定义为程序集清单指定程序集说明的自定义属性。 |
|
定义为程序集清单指定程序集配置(如发布或调试)的自定义属性。 |
|
为程序集清单定义友好默认别名 |
强名称属性
强名称是保护一个程序集的标识和完整性的唯一标识符。您可以通过“项目设计器”->“签名”页在 Visual Studio IDE 中对程序集签名。有关更多信息,请参见 管理程序集签名和清单签名。
也可以使用强名称属性为程序集设置强名称。下表显示在 System.Reflection 命名空间中定义的强名称属性。
属性 |
用途 |
---|---|
布尔值,指示是否要在可执行文件中为强名称签名保留空间,但实际签名推迟到后面的某个阶段。有关更多信息,请参见 延迟为程序集签名。 |
|
指示包含关键字的文件。KeyFile 的位置应相对于项目输出目录(即 %Project Directory%\obj\<configuration>)。例如,若 KeyFile 位于项目目录下,应按如下形式指定 AssemblyKeyFile 属性: [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] |
|
引用在计算机上的“加密服务提供程序”(CSP) 中安装的键。必须为要签名的文件指定一个密钥。 |
若 KeyFile 和 KeyName 值都已指定,将出现以下处理:
若能在 CSP 中发现 KeyName,就使用该键。
若 KeyName 不存在,KeyFile 存在,则将 KeyFile 中的键安装到 CSP 中并使用。
有关更多信息,请参见 程序集安全注意事项。
签名程序集
可以通过两种不同但互为补充的方式为程序集签名:使用强名称或使用签名。您可以使用 Visual Studio IDE “项目设计器”->“签名”页或文件签名工具 (Signcode.exe) 来签名。使用强名称对程序集进行签名时,将向包含程序集清单的文件添加公钥加密。强名称签名帮助验证名称的唯一性,防止名称欺骗,并在解析引用时为调用方提供某种标识。有关更多信息,请参见 管理程序集签名和清单签名 和 如何:使用强名称为程序集签名。
使用强名称签名一个程序集
使用强名称工具 (Sn.exe) 生成包含密钥对的密钥文件。
将强名称属性添加到与 Visual Basic 项目一起自动创建的 AssemblyInfo.vb 文件中。若要编辑此文件,请在解决方案资源管理器中双击该文件名。
下面的示例使用延迟签名来创建带有名为 myKey.snk 的公钥文件的强名称程序集。
<Assembly: Reflection.AssemblyKeyFile("myKey.snk")> <Assembly: Reflection.AssemblyDelaySign(True)>
说明: 如果不创建程序集,如使用 /target:module 选项从命令行进行编译,则忽略程序集级属性。