症状
假设已在计算机上安装 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 开关在 AppDomain 生命周期早期使用的工作的一部分引入的。 这允许安全地进行本来会中断的更改,即使需要使用 AppContext 开关的代码在 AppDomain 启动中很早就运行了也是如此。
问题在于分配了多少内存来存储从注册表中读取的值。 如果用于存储从注册表读取的值的分配空间不足,它将回退到默认值 False。
状态
Microsoft已确认,这是“适用于”部分中列出的Microsoft产品中的问题,Microsoft正在研究即将推出的产品版本中的解决方案。