应用程序配置文件
应用程序配置文件是用于控制程序集绑定的 XML 文件。 它可以将应用程序从使用并行程序集的一个版本重定向到同一程序集的另一个版本。 这称为 按应用程序配置。 应用程序配置文件仅适用于特定的应用程序清单和依赖程序集。 使用嵌入式ISOLATIONAWARE_MANIFEST_RESOURCE_ID清单编译的独立组件需要单独的应用程序配置文件。 使用 CreateActCtx 管理的清单需要单独的应用程序配置文件。
应用程序配置文件指定的重定向可以替代 应用程序清单 和 发布者配置文件指定的程序集版本。 例如,如果发布者配置文件指定将程序集的所有引用从版本 1.0.0.0 重定向到 1.1.0.0,则应用程序配置文件可用于重定向特定应用程序以使用版本 1.0.0.0。 应用程序配置文件仅适用于指定的应用程序清单和依赖程序集。
有关 XML 架构的完整列表,请参阅 应用程序配置文件架构。
应用程序配置文件包含下表中显示的元素和属性。
元素 | 属性 | 必须 |
---|---|---|
configuration | 是 | |
windows | 是 | |
publisherPolicy | 是 | |
应用 | 是 | |
运行时 | 否 | |
assemblyBinding | 是 | |
探讨 | 否 | |
privatePath | 是 | |
依赖 | 否 | |
dependentAssembly | 是 | |
assemblyIdentity | 是 | |
type | 是 | |
name | 是 | |
language | 否 | |
processorArchitecture | 是 | |
version | 是 | |
publicKeyToken | 否 | |
bindingRedirect | 是 | |
oldVersion | 是 | |
newVersion | 是 |
文件位置
应用程序配置文件必须安装在应用程序 清单所在的同一位置。
文件名语法
应用程序配置文件的名称是应用程序可执行文件的名称,后跟.config。
例如,引用Example.exe或Example.dll的应用程序配置文件将使用以下示例中显示的文件名语法。 如果将配置文件安装为单独的文件,或者资源 ID 为 1,则可以省略资源 ID> 字段<。
example.exe。<资源 ID>.config
example.dll。<资源 ID>.config
元素
元素和属性的名称区分大小写。 元素和特性的值都是不区分大小写的,类型特性的值除外。
配置
应用程序配置文件的 Windows 和 运行时 元素的容器元素。 必需。
windows
包括应用于 Win32 程序集重定向的应用程序配置文件的各个部分。
注意
应用程序的作者不应将 windows 子元素作为应用程序的一部分包含配置文件。 如果配置文件的唯一用途是启用探测元素的 privatePath 功能,则可能允许这样做。 探测元素在早于 Windows Server 2008 R2 和 Windows 7 的系统上不可用。
publisherPolicy
指定是否应用发布者策略。
此元素具有下表中显示的属性。
Attribute | 说明 |
---|---|
应用 | 值为“yes”应用发布者策略。 这是默认设置。 值“no”不适用于发布者策略。 |
Runtime — 运行时
包括应用于 .Net 程序集重定向的应用程序配置文件的各个部分。
assemblyBinding
包括应用程序的重定向信息以及受此应用程序配置文件影响的程序集。 assemblyBinding 的第一个子元素必须是标识应用程序的 assemblyIdentity。
从 Windows Server 2008 R2 和 Windows 7 开始,assemblyBinding 元素可以包含探测子元素。
探测
assemblyBinding 元素的可选子元素,用于将程序集搜索扩展到其他目录中。 不需要其他目录是程序集目录的子目录。
注意
此元素在早于 Windows Server 2008 R2 和 Windows 7 的系统上不可用,只能在 Windows 元素中使用。
此元素具有下表中显示的属性。
Attribute | 说明 |
---|---|
privatePath | 指定可能包含程序集的应用程序基目录的子目录的 相对路径 。 最多可以指定九个子目录路径。 用分号分隔每个子目录路径。 |
可以在路径中使用双点特殊说明符来表示当前目录的父目录。 可以使用双点指定当前目录上方的两个以上级别。 不要使用三点。 例如,使用以下 探测 元素的应用程序检查程序集的其他目录。
<probing privatePath="bin;..\bin2\subbin;bin3"/>
dependency
至少一个 dependentAssembly 的容器元素。 每个 dependentAssembly 都只能位于一个 依赖项内。 此元素没有属性。 可选。
dependentAssembly
第一个子元素必须是一个 assemblyIdentity 元素,用于标识应用程序配置文件重定向的并行程序集。 dependentAssembly 没有属性。
assemblyIdentity
作为 assemblyBinding 元素的第一个子元素, assemblyIdentity 描述并唯一标识应用程序。 应用程序配置文件将此应用程序的绑定重定向到并行程序集。 例如,以下 assemblyIdentity 指示应用程序配置文件会影响应用程序 mysampleApp 与并行程序集的绑定。 要重定向的程序集将在 dependentAssembly 中标识。
<assemblyIdentity processorArchitecture="X86" name="Microsoft.Windows.mysampleApp" type="win32" version="1.0.0.0"/>
作为 dependentAssembly 元素的第一个子元素, assemblyIdentity 描述应用程序所依赖的并行程序集。 应用程序配置文件重新配置此所需程序集的标识。 例如,以下 assemblyIdentity 和 bindingRedirect 重新配置对 Microsoft 的依赖项。Windows。从版本 2.0.0.0 到版本 2.1.0.0 的 SampleAssembly。
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32"
name="Microsoft.Windows.SampleAssembly"
processorArchitecture="x86"
publicKeyToken="0000000000000000"/>
<bindingRedirect oldVersion="2.0.0.0" newVersion="2.1.0.0"/>
</dependentAssembly>
</dependency>
请注意,dependentAssembly 中包含的每个 assemblyIdentity 必须与程序集自己的程序集清单中的 assemblyIdentity 完全匹配。
assemblyIdentity 元素具有以下属性。 它没有子元素。
Attribute | 说明 |
---|---|
type | 该值必须是 win32 (小写) 。 必需。 |
name | 名称属性标识受应用程序配置文件或重定向程序集影响的应用程序。 对名称使用以下格式:Organization.Division.Name。 必需。 例如:Microsoft。Windows。MysampleApp 或 Microsoft。Windows。MysampleAsm。 |
language | 标识语言。 可选。 对于引用程序集的 assemblyIdentity ,如果程序集特定于语言,请指定 DHTML 语言代码。 如果程序集用于全球使用 (语言中性) 将值设置为“*”。 |
processorArchitecture | 指定运行应用程序的处理器。 |
version | 指定应用程序或程序集的版本。 使用四部分版本语法:mmmm.nnnn.oooo.pppp。 必需。 |
publicKeyToken | 对于引用程序集的 assemblyIdentity ,一个 16 个字符的十六进制字符串,表示对程序集进行签名的公钥的 SHA-1 哈希的最后 8 个字节。 用于对目录进行签名的公钥必须为 2048 位或更高版本。 所有共享并行程序集是必需的。 |
bindingRedirect
bindingRedirect 元素包含程序集绑定的重定向信息。 每个 bindingRedirect 必须完全包含在一个 dependentAssembly 中。 新版本和旧版本的四部分版本语法必须指定相同的主版本和次要版本。
此元素具有下表中显示的属性。
Attribute | 说明 |
---|---|
oldVersion | 指定要重写和重定向的程序集版本。 使用由四部分构成的版本语法 nnnnn.nnnnn.nnnnn.nnnnn。 按不带空格的短划线指定一系列版本。 例如,2.14.3.0 或 2.14.3.0 2.16.0.0。 必需。 |
newVersion | 指定替换程序集版本。 使用四部分版本语法 nnnnn.nnnnn.nnnnn.nnnnn。 |
注解
应用程序配置文件不指定文件。
示例
<bindingRedirect oldVersion="1.0.0.0" newVersion="1.0.10.0"/>
<bindingRedirect oldVersion="1.0.50.2011-1.0.60.65535" newVersion="1.0.70.0"/>