Ich habe ein sehr merkwürdiges verhalten meiner Software entdeckt und weiß nicht mehr weiter. Es handelt sich dabei um eine WPF Anwenung. Die Anwendung läuft auf allen Betriebssystemen >= Win XP SP3. Nur unter dem englischen Win XP SP3 kommt es beim starten der Anwendung zu einem Fehler. Hier der Fehler:
'The invocation of the constructor on type 'namespace.MainWindow' that matches the specified binding constraints threw an exception. 'Line number '4' and line position '5'.
Das komische hierbei ist: Die Anwendung funktioniert unter dem deutschen winxp. In beiden Testfällen (en, de) wurde jeweils ein sauberes System verwendet, wo das Setup ausgeführt wird.
Die Anwendung setzt das .NET Framework 4 voraus, welches mit dem Setup mitgebracht wird.
Ich hoffe ihr könnt mir schnell helfen, da meine Zeit langsam abläuft :)
Es lag an der Methode, die im Konstruktor aufgerufen wird. In dieser Methode wird unter anderem ein mit kompiliertes XAML Dokument geparsed. Dabei wird anhand der LCID das entsprechende Dokument verwendent. Dies sah dann so aus:
Uri uri = new Uri("/InfoText/" + currentLcid + ".xaml", UriKind.Relative); StreamResourceInfo info = Application.GetResourceStream(uri); FlowDocument doc = (FlowDocument)XamlReader.Load(info.Stream); RichTextBoxManufInfo.Document = doc;
Das dies in Hose geht, wenn es kein Dokument gibt, das [currentLcid].xaml ist klar.
Ich habe diesen Abschnitt jetzt wie folgt geändert:
Uri uri = new Uri("/ManufInfoText/" + currentLcid + ".xaml", UriKind.Relative); StreamResourceInfo info; try { info = Application.GetResourceStream(uri); } catch { uri = new Uri("/ManufInfoText/2057.xaml", UriKind.Relative); info = Application.GetResourceStream(uri); } FlowDocument doc = (FlowDocument)XamlReader.Load(info.Stream); RichTextBoxManufInfo.Document = doc;
Es ist nicht die beste Lösung, da ich aber im Moment unter Zeitdruck stehe, wird es wohl so bleiben :).
Also mal wieder eine halbe Ewigkeit vor einem banalen Problem gesessen ;).
Da der Fehler lautet: "'The invocation of the constructor on type 'namespace.MainWindow'" Ich rate einmal ins Blaue. Hast Du vielleicht deutsche Sonderzeichen im Namespace?
Dürfte eigentlich nichts ausmachen, aber ich habe mit verschiedenen Ländereinstellungen schon die tollsten Dinge erlebt (mit VB6, nicht mit .NET, das steht mir noch bevor)
Nein, ich vermeide generell Sonderzeichen oder allg. irgendwelche Zeichen außerhalb von ASCII bei der Programmierung. Das kann ich definitiv ausschließen.
Ich weiß ehrlich gesagt nicht, in welcher Datei dieser Fehler auftritt. Hier mal jeweils Zeile 4 aus den Dateien, die ich vermuten würde:
MainWindow.Xaml:
xmlns:Controls="clr-namespace:namespace.Controls"
MainWindow.Xaml.cs:
using System.Globalization;
Im Mainwindow Konstruktor wird eine Methode aufgerufen, mit der die Systemsprache ermittelt wird und demnach gewisse Bereiche füllt. Die Systemsprache ermittel ich mit: