探查器兼容性设置

默认情况下,在 .NET Framework 4中,公共语言运行时 (CLR) 仅加载和使用针对 .NET Framework 4 生成的探查器。 除非明确指定,否则 CLR 不加载或运行已为 .NET Framework 2.0、3.0 或 3.5 版本构建的探查器。(在本主题中,术语“2.0 版探查器”是指为 .NET Framework 2.0、3.0 和 3.5 版本构建的探查器。)

探查器用户必须通过使用 COMPLUS_ProfAPI_ProfilerCompatibilitySetting 环境变量来明确选择使用 2.0 版探查器。 .NET Framework 4 中使用的 2.0 版探查器按如下方式运行:

  • .NET Framework 2.0 版分析 API 仍可按照 2.0 版文档中所述的方式在 .NET Framework 4 中正常工作。

  • .NET Framework 4 中不会对未记录的 2.0 版分析 API 或 CLR 行为予以保证。 不能保证依赖于未记录的行为的 2.0 版探查器可在 .NET Framework 4 中正常工作。请注意,此兼容性设置不提供与 CLR 2.0 行为的向后兼容。

COMPLUS_ProfAPI_ProfilerCompatibilitySetting

在设置 COMPLUS_ProfAPI_ProfilerCompatibilitySetting 环境变量之前,必须设置 COR_PROFILER 或 COR_ENABLE_PROFILING 环境变量。 (有关说明,请参见设置分析环境。)

可以将 COMPLUS_ProfAPI_ProfilerCompatibilitySetting 环境变量设置为下表所示的三个值之一。

备注

在 .NET Framework 版本 3.5 和更低版本中,CLR 不支持 COMPLUS_ProfAPI_ProfilerCompatibilitySetting 变量。如果已设置 COR_PROFILER 或 COR_ENABLE_PROFILING 环境变量,则 CLR 始终会尝试加载探查器。

设置

CLR 行为

EnableV2Profiler

加载和激活 2.0 版探查器。

DisableV2Profiler

禁用 2.0 版探查器,但不卸载它们。 .NET Framework 4 探查器不会受到影响。 此设置为默认设置。

PreventLoad

无论为其编写探查器的 .NET Framework 的版本如何,都不会加载任何探查器。

详细的行为如下:

  • EnableV2Profiler

    无论为其编写探查器的 .NET Framework 的版本如何,.NET Framework 4 CLR 都会加载并使用可用的探查器。 在进程内并行分析中,如果 .NET Framework 版本 2.0 CLR 首先在进程中加载一个探查器,则 .NET Framework 4 CLR 不会重新加载该 2.0 版探查器。

  • DisableV2Profiler(默认值)

    .NET Framework 4 CLR 加载探查器,并通过调用探查器的 IUnknown::QueryInterface 方法查找 ICorProfilerCallback3 接口来确定探查器的版本。 

    • 如果探查器实现 ICorProfilerCallback3,则探查器为 .NET Framework 版本 4 探查器,并且 CLR 将继续使用它。

    • 如果探查器未实现 ICorProfilerCallback3,则探查器为 2.0 版探查器。 在此情况下,CLR 会释放探查器接口,且不会激活探查器。 不过,由于 CLR 未卸载探查器 DLL,因此它可以保持与未卸载探查器 DLL 的 .NET Framework 版本 2.0 CLR 的向后兼容性。 (请注意,.NET Framework 4 探查器在分离或关闭时确实会被卸载,因此,若要修改 .NET Framework 4 的探查器,则必须更改此行为。)

  • PreventLoad

    .NET Framework 4 CLR 完全忽略探查器。 此设置对于某些进程内并行方案很有用。 有关更多信息,请参见进程内并行分析

例如,若要指示 CLR 加载 .NET Framework 2.0 探查器,请打开命令提示符窗口并键入以下内容:

set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler

备注

此兼容性开关只会影响探查器启动路径。对于附加-加载探查器,运行时对 ICorProfilerCallback3 接口调用 IUnknown::QueryInterface 函数。如果探查器未实现此接口(此情况适用于 2.0 版探查器),则运行时不会加载探查器,并会在事件日志中记录探查器加载失败项。

请参见

概念

.NET Framework 4 中的分析

其他资源

分析概述

非托管 API 参考