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.ThrowOnException名前trueのスイッチをに設定します。これにより、従来の動作が有効になります。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.

メソッドは、依存ライブラリによって定義されるスイッチ ( Boolean常に値) の値を宣言するために、アプリケーション (またはライブラリ) によって呼び出されます。 SetSwitchThe 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メソッドによって解析できるの文字列表現である必要があります。つまり、"true"、"true"、"false"、または "false" である必要があります。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:

SwitchSwitch 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). 既定値は disabled です。The default is disabled. スイッチは、をHttpClient初めて使用する前に設定する必要があります。The switch must be set before the first use of HttpClient. .NET Core 3.0 Preview 4 以降で使用できます。Available starting with .NET Core 3.0 Preview 4.
System.Net.Http.UseSocketsHttpHandler true または falsetrue or false HttpClient System.Net.Http.SocketsHttpHandler ( )やSystem.Net.Http.HttpClientHandler ()などの高レベルのネットワークapiを使用するかどうかを決定しますfalsetrueDetermines whether high-level networking APIs such as HttpClient use System.Net.Http.SocketsHttpHandler (true) or System.Net.Http.HttpClientHandler (false).