2015-09-14 14 views
10

Próbuję ustawić przełącznik zgodności "Switch.System.Xml.IgnoreEmptyKeySequences" z wpisu w pliku app.config (lub web.config), ale pojawia się przesłonięcie być zignorowanym. Aby usunąć możliwość jakiejkolwiek dziwnej konfiguracji mojego istniejącego projektu, stworzyłem zupełnie nowy projekt .Net 4.6 Web Forms (i powiązany projekt testowy) w VS2015..Net 4.6 AppContextSwitchOverrides nie ustawia przełączników zadeklarowanych w konfiguracji

śledzę Microsoft wytyczne dla AppContext przełącza https://msdn.microsoft.com/en-us/library/mt298997(v=vs.110).aspx i https://msdn.microsoft.com/en-us/library/mt270286(v=vs.110).aspx

pliku app.config jest w następujący sposób:

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

Kod używam odczytać wartość wynosi:

 bool valueWasFound; 
     bool valueFromContext; 

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

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

A jednak konsekwentnie otrzymuję false dla obu valueWasFound i valueFromContext.

Próbowałem tego z innymi wartościami przełącznika z tym samym wynikiem.

Uważam, że jeżeli ustawić przełącznik w kodzie za pomocą

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

Następnie przełącznik jest ustawiony zgodnie z oczekiwaniami (tzn mam true zarówno valueWasFound i valueFromContext).

Ale byłoby bardzo dużo wolą ustawić to w app.config/web.config

Wszelkie pomysły na to, jak się dostać do pracy byłoby bardzo mile widziane.

+0

Widzę to samo zachowanie tutaj, ale z przełącznikiem _Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate_. Ustawienie go w Web.config (aplikacja IIS) jest ignorowane, a 'TryGetSwitch' daje taki sam wynik, jaki masz, ustawienie go w kodzie wydaje się działać. – arfbtwn

Odpowiedz

0

Powinieneś modyfikować App.config w eksploratorze rozwiązań. Ten plik zostanie zmieniony na nazwę YourAppName.exe.config i powinien znajdować się w folderze binarnym. Usunięcie lub zmiana nazwy tego pliku spowoduje, że to zastąpienie przełącznika nie będzie miało żadnego efektu. (Możesz dodać ten plik ręcznie również po zbudowaniu)

Uważam, że musisz ręcznie umieścić App.config obok swojego exe, co będzie miało niewłaściwą nazwę.

0

Podobne zachowanie zaobserwowałem przy następującym ustawieniu w .Net framework 4.6.2 <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true"/> Dziwne było to, że zmieniło zachowanie podczas normalnego działania, ale kończy się niepowodzeniem, gdy próbujemy uruchomić UTC.

0

Alternatywą jest dodanie przełącznika do rejestru. Wydaje się, że działa.

MSDN dokumentacja:

Dodając wartość ciągu, którego nazwa to nazwa przełącznika do klucza HKLM \ SOFTWARE \ Microsoft.NETFramework \ AppContext w rejestrze. Jego wartość musi być ciągiem znaków typu Boolean, który można przeanalizować za pomocą metody Boolean.Parse; to znaczy, musi to być "prawda", "prawda", "fałsz" lub "fałsz". Jeśli środowisko wykonawcze napotka inną wartość, ignoruje przełącznik.

W moim przypadku zrobiłem to

Nazwa wartości: Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate

Dane wartości: prawda

enter image description here

Minusem jest to, że ma ona zastosowanie do wszystkich aplikacji na komputerze. W moich ustawieniach rejestru książek są jeszcze mniej preferowane niż coś na stałe w kodzie, więc będę trzymać się podejścia programowego.

Ta sztuczka jest nadal fajna, ale wystarczy szybko wypróbować coś.

Powiązane problemy