AppContext.SetSwitch(String, Boolean) AppContext.SetSwitch(String, Boolean) AppContext.SetSwitch(String, Boolean) AppContext.SetSwitch(String, Boolean) Method


スイッチの値を設定します。Sets the value of a switch.

 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)


String String String String

スイッチの名前です。The name of the switch.

Boolean Boolean Boolean Boolean

スイッチの値です。The value of the switch.


次のコード行という名前のスイッチを設定するSwitch.AmazingLib.ThrowOnExceptiontrue、レガシーの動作を有効にします。The following line of code sets a switch named Switch.AmazingLib.ThrowOnException to true, which enables a legacy behavior. ライブラリがライブラリのコンシューマーが呼び出すことによって、スイッチの値を設定するかどうかを確認できますし、TryGetSwitchメソッド。The library can then check whether a library consumer has set the value of the switch by calling the TryGetSwitch method.

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


AppContextクラスにより、ライブラリの作成者に、ユーザーの新しい機能についての統一されたオプトアウト メカニズムを提供します。The AppContext class enables library writers to provide a uniform opt-out mechanism for new functionality for their users. これは、オプトアウト要求を伝達するために、コンポーネント間に疎結合のコントラクトを確立します。It establishes a loosely-coupled contract between components in order to communicate an opt-out request. 通常、この機能は既存の機能が変更されるときに重要となります。This capability is typically important when a change is made to existing functionality. それに対して、新しい機能には暗黙のオプトインが既に存在しています。Conversely, there is already an implicit opt-in for new functionality.

SetSwitchメソッドは、スイッチの値を宣言するアプリケーション (またはライブラリ) によって呼び出されます (これは常に、Boolean値)、依存するライブラリを定義します。The SetSwitch method is called by an application (or a library) to declare the value of a switch (which is always a Boolean value) that a dependent library defines. スイッチは、常に暗黙的にfalse、新しい動作を提供します。The switch is always implicitly false, which provides the new behavior. スイッチの設定trueにより従来の動作を提供します。Setting the switch to true enables it, which provides the legacy behavior. スイッチに明示的に設定falseも、新しい動作を提供します。Explicitly setting the switch to false also provides the new behavior. 依存するライブラリは、スイッチの値を呼び出して確認できますし、TryGetSwitchメソッド。The dependent library can then check the value of the switch by calling the TryGetSwitch method.


ライブラリによって公開される正式なコントラクトであるために、スイッチ名に一貫性のある形式を使用することをお勧めします。It's beneficial to use a consistent format for switch names, since they are a formal contract exposed by a library. 2 つの明確な形式を次に示します。The following are two obvious formats.

  • Switch.namespace.switchnameSwitch.namespace.switchname
  • Switch.library.switchnameSwitch.library.switchname

プログラムでは、スイッチの値の設定に加えて、.NET Framework で実行されているアプリケーションにも設定できます。For applications running on the .NET Framework, in addition to setting the value of a switch programmatically, it can also be set:

  • スイッチの名前と値を追加することによって、 <AppContextSwitchOverrides >内の要素、 <ランタイム >アプリケーション構成ファイルのセクション。By adding the switch name and value to the <AppContextSwitchOverrides> element in the <runtime> section of an application configuration file. たとえば、次はという名前のスイッチを定義します。Libraries.FPLibrary.UseExactFloatingPointComparison値がFalseします。For example, the following defines a switch named Libraries.FPLibrary.UseExactFloatingPointComparison whose value is False.

          <AppContextSwitchOverrides value="Libraries.FPLibrary.UseExactFloatingPointComparison=false" />
  • 名前を持つスイッチの名前は、文字列値を追加してに、HKLM\SOFTWARE\Microsoft\.NETFramework\AppContextレジストリのキー。By adding a string value whose name is the name of the switch to the HKLM\SOFTWARE\Microsoft\.NETFramework\AppContext key in the registry. その値の文字列表現をする必要があります、Booleanで解析できるBoolean.Parseメソッドは、"False"または"false""True"を"true"である必要があります。Its value must be the string representation of a Boolean that can be parsed by the Boolean.Parse method; that is, it must be "True", "true", "False", or "false".

場合switchNameが既に存在するによっての値が上書きされる、isEnabled引数。If switchName already exists, its value is overwritten by the isEnabled argument. 最新の呼び出し、SetSwitchメソッドは、アプリ構成ファイル、または前の呼び出しでは、レジストリで定義されている値をオーバーライド、SetSwitchメソッド。That is, the most recent call to the SetSwitch method overrides the value defined in the registry, in an app configuration file, or by previous calls to the SetSwitch method.

AppContext.SetSwitch と .NET CoreAppContext.SetSwitch and .NET Core

.NET core でのプログラムによる呼び出しをサポートしている、SetSwitchメソッドのみです。.NET Core supports programmatic calls with the SetSwitch method only. 次のスイッチがサポートされています。The following switches are supported:

切り替えSwitch Values 説明Description
System.Net.Http.SocketsHttpHandler.Http2Support true または falsetrue or false 示す有効では、http/2 プロトコルをサポートするかどうか (true) または無効になっています (false)。Indicates whether support for the HTTP/2 protocol is enabled (true) or disabled (false). 既定値は無効です。The default is disabled. 最初に使用する前に、スイッチを設定する必要がありますHttpClientします。The switch must be set before the first use of HttpClient. .NET Core 3.0 プレビュー 4 以降で利用できます。Available starting with .NET Core 3.0 Preview 4.
System.Net.Http.UseSocketsHttpHandler true または falsetrue or false 高度なのかどうかを判断します。 ネットワーク Api などHttpClient使用System.Net.Http.SocketsHttpHandler(true) またはSystem.Net.Http.HttpClientHandler(false)。Determines whether high-level networking APIs such as HttpClient use System.Net.Http.SocketsHttpHandler (true) or System.Net.Http.HttpClientHandler (false).