AppContext.SetSwitch(String, Boolean) 方法

定义

设置开关的值。

public:
 static void SetSwitch(System::String ^ switchName, bool isEnabled);
public static void SetSwitch(string switchName, bool isEnabled);
static member SetSwitch : string * bool -> unit
Public Shared Sub SetSwitch (switchName As String, isEnabled As Boolean)

参数

switchName
String

开关的名称。

isEnabled
Boolean

开关的值。

例外

switchNamenull

switchNameEmpty

示例

以下代码行设置一个命名Switch.AmazingLib.ThrowOnExceptiontrue开关,用于启用旧行为。 然后,库可以通过调用 TryGetSwitch 方法来检查库使用者是否已设置开关的值。

AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", true);
AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", true)
AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", True)

注解

AppContext 类使库编写者能够为其用户提供新的功能的统一选择退出机制。 它建立组件之间的松散耦合协定,以便传达选择退出请求。 当对现有功能进行更改时,此功能通常很重要。 相反,已有新功能隐式选择加入。

应用程序 SetSwitch (或库)调用该方法以声明依赖库定义的开关(始终是 Boolean 值)的值。 开关始终隐式 false提供新行为。 设置开关为true后可启用它,从而恢复旧有行为。 将此开关显式设置为 false 还将提供新行为。 然后,依赖库可以通过调用 TryGetSwitch 方法检查开关的值。

注释

对交换机名称使用一致的格式是有益的,因为它们是库公开的正式协定。 以下是两种明显的格式。

  • Switch.命名空间.switchname
  • Switchswitchname

对于在 .NET Framework 上运行的应用程序,除了以编程方式设置开关的值外,还可以设置它:

  • 通过将开关名称和值添加到应用程序配置文件的运行时>部分中的 AppContextSwitchOverrides<>元素。< 例如,下面定义了一个名为 Libraries.FPLibrary.UseExactFloatingPointComparison 其值为 False.

    <configuration>
       <runtime>
          <AppContextSwitchOverrides value="Libraries.FPLibrary.UseExactFloatingPointComparison=false" />
       </runtime>
    </configuration>
    
  • 通过将名称为开关名称的字符串值添加到 HKLM\SOFTWARE\Microsoft\。NETFramework\AppContext (和 HKLM\SOFTWARE\Wow6432Node\Microsoft\.注册表中的 NETFramework\AppContext) 子项。 其值必须是方法可以分析Boolean.Parse的字符串Boolean表示形式;也就是说,它必须是“True”、“true”、“False”或“false”。

如果注册表项存在,则调用参数时SetSwitch会覆盖isEnabled其值。 也就是说,对方法的最新调用 SetSwitch 将替代注册表、应用配置文件中或之前对方法的调用 SetSwitch 中定义的值。

适用于

另请参阅