修复:AppContext 开关替代不应用于在 .NET Framework 4.7 上运行的应用程序

应用对象
.NET Framework 4.7

症状

假设已在计算机上安装 Microsoft .NET Framework 4.7。 你可能会注意到,在 .NET Framework 上运行的应用程序不遵循在 AppContext 开关的注册表中指定的兼容性设置。 在此方案中,尝试为 AppContext 标志设置注册表选项时,它的行为就像注册表选项中指定的值设置为 False 一样。

原因

当程序读取注册表中 AppContext 开关的值时,无法检索数据。 在这种情况下,假定在注册表中指定设置的方式有问题,并将值 False 返回到应用程序。

解决方法

若要解决此问题,请使用应用程序配置 (app.config) 文件将标志设置为所需值。

<AppContextSwitchOverrides> 元素添加到 <app.config文件的运行时>节。 开关具有单个属性(即 value),其值为表示同时包含开关名称和值的键或值对的字符串。

若要定义多个开关,请在 AppContextSwitchOverrides> 元素的值属性中<用分号分隔每个开关的键或值对。 在这种情况下, <AppContextSwitchOverrides> 元素具有以下格式:

XML


<AppContextSwitchOverrides value=”switchName1=value1;switchName2=value2” />

<使用 AppContextSwitchOverrides> 元素定义配置设置具有应用程序范围。 也就是说,它仅影响应用程序。

由于 app.config 文件特定于应用程序,因此必须对所有受影响的应用程序执行此操作。

有关 AppContext 的详细信息,请转到Microsoft开发人员网络 (MSDN) 网站上的以下主题:

AppContext 类

详细信息

此问题是在使 AppContext 开关在 AppDomain 生命周期早期使用的工作的一部分引入的。 这允许安全地进行本来会中断的更改,即使需要使用 AppContext 开关的代码在 AppDomain 启动中很早就运行了也是如此。

问题在于分配了多少内存来存储从注册表中读取的值。 如果用于存储从注册表读取的值的分配空间不足,它将回退到默认值 False

状态

Microsoft已确认,这是“适用于”部分中列出的Microsoft产品中的问题,Microsoft正在研究即将推出的产品版本中的解决方案。