.Net 4.6 AppContextSwitchOverrides 未设置配置中声明的开关

问题描述 投票:0回答:4

我尝试从 app.config(或 web.config)文件中的条目设置兼容性开关“Switch.System.Xml.IgnoreEmptyKeySequences”,但覆盖似乎被忽略。 为了消除现有项目中任何奇怪配置的可能性,我在 VS2015 中创建了一个全新的 .Net 4.6 Web Forms 项目(以及相关的测试项目)。

我正在遵循 Microsoft AppContext 开关指南 https://msdn.microsoft.com/en-us/library/mt298997(v=vs.110).aspxhttps://msdn.microsoft.com/en-us/library/mt270286(v=vs.110).aspx

app.config文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Xml.IgnoreEmptyKeySequences=true"/>
  </runtime>
</configuration>

我用来读取该值的代码是:

bool valueWasFound;
bool valueFromContext;

string switchString = "Switch.System.Xml.IgnoreEmptyKeySequences";

valueWasFound = AppContext.TryGetSwitch(switchString, out valueFromContext);

但我始终得到

false
valueWasFound
我已经尝试过使用其他开关值,得到相同的结果。

我发现如果我使用代码设置开关

valueFromContext

然后按预期设置开关(即,对于 
AppContext.SetSwitch("Switch.System.Xml.IgnoreEmptyKeySequences", true);

true
,我都得到
valueWasFound
)。
但我非常愿意在 App.Config / web.config 中设置它

.net app-config .net-4.6
4个回答
1
投票

MSDN 文档:

通过将名称为交换机名称的字符串值添加到注册表中的 HKLM\SOFTWARE\Microsoft.NETFramework\AppContext 项中。它的值必须是可以通过 Boolean.Parse 方法解析的布尔值的字符串表示形式;也就是说,它必须是“True”、“true”、“False”或“false”。如果运行时遇到任何其他值,它会忽略该开关。

就我而言,我这样做了

值名称:Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate

数值数据: 正确

缺点是它适用于机器上的所有应用程序。 在我的书中,注册表设置甚至比代码中硬编码的设置更不受欢迎,因此我将坚持使用编程方法。

这个技巧仍然很巧妙,尽管只是为了快速尝试一些东西。


1
投票
valueFromContext

奇怪的是,它改变了正常运行时的行为,但当我们尝试运行 UTC 时却失败了。

    


0
投票

我相信你一定是手动将 App.config 放在你的 exe 旁边,这会导致名称不正确。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.