在代码中设置开关

win*_*sgm 2 .net c#

我正在尝试在我的控制台应用程序中嵌入以下开关设置,但我不需要app.config.还有另一种方法可以在应用程序中设置此开关吗?

我遇到过,AppContext.SetSwitch但这只适用于.NET 4.6,但我的应用程序需要在XP机器上运行.还有另一种方法吗?

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
Run Code Online (Sandbox Code Playgroud)

Evk*_*Evk 5

如果您的目标版本低于.NET 4.6并希望在没有app.config的情况下执行此操作,则可以执行以下操作:

var type = Type.GetType("System.AppContext");
if (type != null) {
    var setSwitch = type.GetMethod("SetSwitch", BindingFlags.Public | BindingFlags.Static);
    setSwitch.Invoke(null, new object[] { "Switch.System.IO.UseLegacyPathHandling", false });
    setSwitch.Invoke(null, new object[] { "Switch.System.IO.BlockLongPaths", false });
}
Run Code Online (Sandbox Code Playgroud)

这样,如果您的应用程序当前在.NET 4.6+上运行(AppContext可用的地方以及那些交换机实际上会产生任何影响) - 您可以设置它们,否则什么都不做.