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 属性指定程序集的多份副本是否可以共存。

下表显示标识属性:

属性

用途

AssemblyName

详细描述程序集的标识。

AssemblyVersionAttribute

指定程序集的版本。

AssemblyCultureAttribute

指定程序集支持哪个区域性。

AssemblyFlagsAttribute

指定程序集是否支持在同一台计算机上、同一进程中或同一应用程序域中并行执行。

下面的代码向程序集应用版本和区域性属性:

'Set version number for assembly.
<Assembly: Reflection.AssemblyVersionAttribute("4.3.2.1")> 
'Set culture as German.
<Assembly: Reflection.AssemblyCultureAttribute("de")> 

信息性属性

您可以使用信息性属性为程序集提供其他的公司或产品信息。下表显示在 System.Reflection 命名空间中定义的信息性属性。

属性

用途

AssemblyProductAttribute

定义为程序集清单指定产品名称的自定义属性。

AssemblyTrademarkAttribute

定义为程序集清单指定商标的自定义属性。

AssemblyInformationalVersionAttribute

定义为程序集清单指定信息性版本的自定义属性。

AssemblyCompanyAttribute

定义为程序集清单指定公司名称的自定义属性。

AssemblyCopyrightAttribute

定义为程序集清单指定版权的自定义属性。

AssemblyFileVersionAttribute

指示编译器使用 Win32 文件版本资源的特定版本号。

CLSCompliantAttribute

指示程序集是否符合公共语言规范 (CLS)。

程序集清单属性

可以使用程序集清单属性提供程序集清单中的信息。其中包括标题、说明、默认别名和配置。下表显示在 System.Reflection 命名空间中定义的程序集清单属性。

属性

用途

AssemblyTitleAttribute

定义为程序集清单指定程序集标题的自定义属性。

AssemblyDescriptionAttribute

定义为程序集清单指定程序集说明的自定义属性。

AssemblyConfigurationAttribute

定义为程序集清单指定程序集配置(如发布或调试)的自定义属性。

AssemblyDefaultAliasAttribute

为程序集清单定义友好默认别名

强名称属性

强名称是保护一个程序集的标识和完整性的唯一标识符。您可以通过“项目设计器”->“签名”页在 Visual Studio IDE 中对程序集签名。有关更多信息,请参见 管理程序集签名和清单签名

也可以使用强名称属性为程序集设置强名称。下表显示在 System.Reflection 命名空间中定义的强名称属性。

属性

用途

AssemblyDelaySignAttribute

布尔值,指示是否要在可执行文件中为强名称签名保留空间,但实际签名推迟到后面的某个阶段。有关更多信息,请参见 延迟为程序集签名

AssemblyKeyFileAttribute

指示包含关键字的文件。KeyFile 的位置应相对于项目输出目录(即 %Project Directory%\obj\<configuration>)。例如,若 KeyFile 位于项目目录下,应按如下形式指定 AssemblyKeyFile 属性:

[assembly: AssemblyKeyFile("..\\..\\mykey.snk")]

AssemblyKeyNameAttribute

引用在计算机上的“加密服务提供程序”(CSP) 中安装的键。必须为要签名的文件指定一个密钥。

若 KeyFile 和 KeyName 值都已指定,将出现以下处理:

  • 若能在 CSP 中发现 KeyName,就使用该键。

  • 若 KeyName 不存在,KeyFile 存在,则将 KeyFile 中的键安装到 CSP 中并使用。

  • 有关更多信息,请参见 程序集安全注意事项

签名程序集

可以通过两种不同但互为补充的方式为程序集签名:使用强名称或使用签名。您可以使用 Visual Studio IDE “项目设计器”->“签名”页文件签名工具 (Signcode.exe) 来签名。使用强名称对程序集进行签名时,将向包含程序集清单的文件添加公钥加密。强名称签名帮助验证名称的唯一性,防止名称欺骗,并在解析引用时为调用方提供某种标识。有关更多信息,请参见 管理程序集签名和清单签名如何:使用强名称为程序集签名

使用强名称签名一个程序集

  1. 使用强名称工具 (Sn.exe) 生成包含密钥对的密钥文件。

  2. 将强名称属性添加到与 Visual Basic 项目一起自动创建的 AssemblyInfo.vb 文件中。若要编辑此文件,请在解决方案资源管理器中双击该文件名。

    下面的示例使用延迟签名来创建带有名为 myKey.snk 的公钥文件的强名称程序集。

    <Assembly: Reflection.AssemblyKeyFile("myKey.snk")> 
    <Assembly: Reflection.AssemblyDelaySign(True)> 
    
    说明:

    如果不创建程序集,如使用 /target:module 选项从命令行进行编译,则忽略程序集级属性。

请参见

任务

如何:定义自己的属性

如何:使用强名称为程序集签名

概念

属性的应用

程序集安全注意事项

参考

强名称工具 (Sn.exe)

文件签名工具 (Signcode.exe)

“项目设计器”->“签名”页

“程序集信息”对话框

其他资源

Visual Basic 中的自定义属性 (Attribute)

管理应用程序属性

管理程序集签名和清单签名