激活配置文件
提供托管扩展性模型的应用程序可以要求使用特定版本的 .NET Framework 运行时来运行扩展,采用的方式是在应用程序配置文件或主机配置文件中指定该版本。 在 .NET Framework 4 版之前,使用更新版本的运行时写入扩展的唯一方法是为应用程序提供一个不同的配置文件。 遗憾的是,这将产生不想要的结果,即强制所有扩展使用更新的运行时。
激活配置文件为以下特定情形提供了备选解决方案:扩展作者将应用程序的扩展性模型用作一个平台,并完全控制加载的所有扩展。 在此情形中,允许扩展作者决定加载和激活运行时的哪个版本是合理的。
例如,您可能需要使用 .NET Framework 4 创建一组 Microsoft 管理控制台 (MMC) 管理单元,来自定义 MMC 指定激活 .NET Framework 2.0 版运行时的计算机上的管理控制台的用户界面。 虽然您无法直接替换 MMC 的激活信息,但您可以使用环境变量来指定为特定控制台重写的激活配置文件的位置,以便在启动控制台时激活 .NET Framework 4 运行时。
提供激活配置文件
激活配置文件名称遵循与应用程序配置文件名称相同的模式,只不过它使用的扩展名为 .activation_config。 例如,名为 MyApp.exe 的应用程序具有一个名为 MyApp.exe.config 的应用程序配置文件和一个名为 MyApp.exe.activation_config 的激活配置文件。
激活配置文件可以包含任何配置文件元素,但仅分析那些通常用于激活的元素:
<startup> 部分中的元素。
<runtime> 部分中的 <gcServer>、<appdomainResourceMonitoring> 和 <etwEnable> 元素。
重要事项 确保激活配置文件中的三个 <runtime> 设置与应用程序或主机配置文件中所对应的设置相同。
活动配置文件仅由启动运行时的填充代码使用。 运行时本身不会与此文件进行交互。
在创建应用程序配置文件后,将 COMPLUS_ApplicationMigrationRuntimeActivationConfigPath 环境变量设置为文件所在的路径。 在选择要激活的运行时的过程中,将为其名称与模式匹配的应用程序配置文件搜索此路径。
如果设置了环境变量,但指定的路径未包含模式匹配的任何激活配置文件,则照常由应用程序或主机配置文件控制运行时激活。
可以全局设置环境变量,也可以由配置环境的启动程序进程来设置环境变量。 设置全局环境变量受到与其他应用程序争用的条件的限制。
例如,下面的命令行会话将激活配置文件复制到文件夹中,并将环境变量设置为此路径,然后运行应用程序:
copy c:\MyConfigs\MyApp.exe.activation_config c:\CustomConfigs
set COMPLUS_ApplicationMigrationRuntimeActivationConfigPath =
c:\CustomConfigs
c:\Program Files\MyApp\MyApp.exe
下面的活动配置文件指定 .NET Framework 4 运行时的激活并从假设的应用程序的配置文件复制假设的 <appDomainResourceMonitoring> 设置:
<configuration>
<startup>
<supportedRuntime version="v4.0.xxxx"/>
</startup>
<runtime>
<appDomainResourceMonitoring enabled="true"/>
</runtime>
</configuration>
支持的激活方法
激活配置文件将影响以下激活方法。 “旧版”一词是指 .NET Framework 4 之前的 .NET Framework 版本。
在安装了 .NET Framework 4 的计算机上运行任何托管 .exe 文件。
使用旧版宿主 API;例如,CorBindToRuntimeHost 全局函数。
加载并运行使用 Visual C++ 创建的旧版混合模式组件。
加载并运行旧版 COM 组件。
注意 在加载和运行使用 .NET Framework 4 或更高版本创建的 COM 组件时,不会使用活动配置文件。
在带有 METAHOST_POLICY_USE_PROCESS_IMAGE_PATH 标志的宿主 API 中使用 ICLRMetaHostPolicy::GetRequestedRuntime 方法。
使用 ICLRMetaHostPolicy::GetRequestedRuntime 方法并提供 pwzBinary 参数的程序集文件路径。
注意 如果调用 ICLRMetaHostPolicy::GetRequestedRuntime 方法且不使用 pwzBinary 参数和 METAHOST_POLICY_USE_PROCESS_IMAGE_PATH 标志,则不会使用活动配置文件。