2015-09-14 7 views
10

Ich versuche, den Kompatibilitätsschalter "Switch.System.Xml.IgnoreEmptyKeySequences" aus einem Eintrag in einer Datei app.config (oder web.config) zu setzen, aber die Überschreibung erscheint ignoriert werden. Um die Möglichkeit einer seltsamen Konfiguration meines bestehenden Projekts zu entfernen, habe ich in VS2015 ein brandneues .Net 4.6 Web Forms Projekt (und zugehöriges Testprojekt) erstellt..Net 4.6 AppContextSwitchOverrides nicht einstellen Schalter in Config

ich folgende bin der Microsoft Guidance für AppContext schaltet https://msdn.microsoft.com/en-us/library/mt298997(v=vs.110).aspx und https://msdn.microsoft.com/en-us/library/mt270286(v=vs.110).aspx

Die app.config-Datei wird wie folgt dar:

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

Der Code, den ich um den Wert zu lesen bin mit ist:

 bool valueWasFound; 
     bool valueFromContext; 

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

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

Und trotzdem bekomme ich konsequent false für beide valueWasFound und valueFromContext.

Ich habe dies mit anderen Switch-Werten mit dem gleichen Ergebnis versucht.

Ich finde, dass wenn ich den Schalter im Code festgelegt mit

AppContext.SetSwitch("Switch.System.Xml.IgnoreEmptyKeySequences", true); 

Dann wird der Schalter eingestellt wird, wie erwartet (das heißt ich true sowohl für valueWasFound und valueFromContext).

Aber ich würde es vorziehen, sehr viel diese Einstellung vornehmen, in der App.Config/web.config

Alle Ideen, wie ich dies sehr geschätzt würde zu arbeiten.

+0

Ich sehe das gleiche Verhalten hier, aber mit dem Schalter _Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate_. Die Einstellung in Web.config (IIS-Anwendung) wird ignoriert und "TryGetSwitch" liefert das gleiche Ergebnis wie Sie. Die Einstellung im Code scheint zu funktionieren. – arfbtwn

Antwort

0

Sie sollten App.config in Ihrem Solution Explorer ändern. Diese Datei wird in YourAppName.exe.config umbenannt und sollte sich in Ihrem Binärdateien-Ordner befinden. Das Entfernen oder Umbenennen dieser Datei führt dazu, dass diese Schalterüberschreibung keine Auswirkungen hat. (Sie können diese Datei auch nach dem Erstellen manuell hinzufügen)

Ich glaube, Sie müssen App.config neben Ihrer exe manuell, die einen falschen Namen haben.

0

Ich beobachtete ein ähnliches Verhalten mit folgender Einstellung in .NET Framework 4.6.2 <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true"/> Merkwürdig war, dass sie das Verhalten änderte sich, als normal läuft, aber nicht, wenn wir einen UTC zu laufen versuchen.

0

Alternative ist es, den Schalter zur Registrierung hinzuzufügen. Es scheint zu funktionieren.

MSDN-Dokumentation:

einen String-Wert, dessen Name Durch das Hinzufügen der Name des Schalters auf die HKLM \ SOFTWARE \ Microsoft.NETFramework \ AppContext Schlüssel in der Registrierung. Sein Wert muss die Zeichenfolgendarstellung eines Boolean sein, der von der Boolean.Parse-Methode analysiert werden kann; das heißt, es muss "wahr", "wahr", "falsch" oder "falsch" sein. Wenn die Laufzeit einen anderen Wert erkennt, ignoriert sie den Wechsel.

In meinem Fall habe ich diesen

Wertname: Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate

Wert: wahr

enter image description here

Der Nachteil ist, dass es für alle Anwendungen auf dem Gerät gilt. In meinem Buch sind die Registrierungseinstellungen noch weniger bevorzugt als etwas, das im Code fest codiert ist, also werde ich mich an den programmatischen Ansatz halten.

Dieser Trick ist immer noch ordentlich, nur um schnell etwas auszuprobieren.

Verwandte Themen