2016-03-30 14 views
7

Czy ktoś mógłby dać mi powodów technicznych <clear></clear> jest nieważny w app.config vs <clear />Dlaczego <clear></clear> to nie to samo, co <clear /> w pliku app.config?

To zazwyczaj używane tak:

<connectionStrings> 
<clear/> 
<add etc..... /> 
</connectionStrings> 

Problem jest Używam produkt instalatora (InstallShield) z czy transformacja XML do app.config pliki, a to nic nie zmienia <clear /> do <clear></clear>

to łamie aplikacji (usługa nie będzie nawet zacząć)

Na razie szukam technicznego wyjaśnienia, ale jeśli masz jakieś obejście, które byłoby miłe.

+0

Co jest błąd po uruchomieniu usługi? Ta składnia jest nadal ważna i nie powinno być żadnego powodu do niepowodzenia. –

+0

Jest on w czasie wykonywania podczas próby uruchomienia usługi, jest nieprawidłowy xml. –

+6

Losowe zgadywanie: '' parsuje do 'null', ale' 'parsuje do pustego łańcucha. Chociaż kuszące jest myśleć, że są to te same rzeczy, istnieją konteksty, kiedy chcesz poznać różnicę. –

Odpowiedz

1

Wygląda na to, że użycie <clear></clear> powoduje przerwanie parsowania sekcji connectionStrings (i prawdopodobnie także innych, jeśli są tam używane). Zobacz komentarz Hansa Passanta, aby znaleźć możliwe wyjaśnienie.

Jeśli występuje <clear></clear>, ConfigurationManager.ConnectionStrings jest pusty. Tak więc przyczyną awarii usługi może być to, że nie sprawdzasz, czy ta kolekcja zawiera jakiekolwiek elementy, lub próbujesz uzyskać do nich dostęp za pośrednictwem ConfigurationManager.ConnectionStrings["nameoftheconnection"], która zgłasza wyjątek, jeśli nie ma elementu z tym kluczem.

Możliwe obejścia (które są zarówno administracja raczej niezgrabne i hacky)

  1. można usunąć <clear />. Może to prowadzić do niektórych dodatkowych ciągów połączenia utworzonych przez niektóre zbiory referencyjne. Ale ponieważ twój własny łańcuch połączeń powinien znajdować się na końcu tej kolekcji, możesz usunąć niechciane wpisy.

  2. dodać zadanie niestandardowe do procedury instalacyjnej, która przetwarza plik app.config w jednym z późniejszych etapów i zastępuje <clear></clear> z <clear />

+0

Ta rada jest na miejscu. Tak naprawdę skończyłem z opcją 2. –