2016-03-30 7 views
7

Kann jemand bitte geben Sie mir den technischen Grund, warum <clear></clear> in app.config vs <clear />Warum ist <clear></clear> nicht identisch mit <clear /> in app.config?

Es ist wie dies in der Regel verwendet, ungültig ist:

mit Ich verwende einen Installer Produkt (Installshield)
<connectionStrings> 
<clear/> 
<add etc..... /> 
</connectionStrings> 

Problem ist ist xML-Transformation app.config-Dateien, und es verändert <clear /> zu <clear></clear>

dies die Anwendung bricht (Dienst wird nicht einmal starten)

Für jetzt bin ich nur auf der Suche nach der technischen Erklärung, aber wenn Sie eine Workaround haben, wäre das auch schön.

+0

Was ist der Fehler, wenn Sie den Dienst starten? Diese Syntax ist immer noch gültig und es sollte keinen Grund zum Scheitern geben. –

+0

Es ist zur Laufzeit, wenn Sie versuchen, den Dienst zu starten, ist ungültig Xml. –

+6

Zufallsraten: '' analysiert zu 'null', aber' 'analysiert die leere Zeichenfolge. Während es verlockend ist, zu denken, dass sie das Gleiche sind, gibt es Kontexte, in denen Sie den Unterschied wissen möchten. –

Antwort

1

Es scheint, dass die Verwendung von <clear></clear> die Analyse des Abschnitts connectionStrings (und wahrscheinlich auch anderer, wenn dort verwendet wird) unterbricht. Siehe den Kommentar von Hans Passant für eine mögliche Erklärung.

Wenn <clear></clear> vorhanden ist, ist ConfigurationManager.ConnectionStrings leer. Der Grund für Ihren Dienstabsturz ist möglicherweise, dass Sie nicht überprüfen, ob diese Sammlung Elemente enthält, oder versuchen Sie, über ConfigurationManager.ConnectionStrings["nameoftheconnection"] darauf zuzugreifen, die eine Ausnahme auslöst, wenn es kein Element mit diesem Schlüssel gibt.

Mögliche Abhilfen (was ich sind beide Server-Betreiber eher ungeschickt und Hacky)

  1. Sie die <clear /> entfernen. Dies kann zu einigen zusätzlichen Verbindungszeichenfolgen führen, die von einigen referenzierten Assemblys erstellt werden. Da sich Ihre eigene Verbindungszeichenfolge am Ende dieser Auflistung befinden sollte, können Sie möglicherweise die unerwünschten Einträge entfernen.

  2. fügen Sie eine benutzerdefinierte Aufgabe zu Ihrer Installationsroutine, die die app.config-Datei in einem der späteren Schritte verarbeitet und ersetzt <clear></clear> mit <clear />

+0

Dieser Hinweis ist genau richtig. Ich bin am Ende mit Option 2 gelaufen. –

Verwandte Themen