| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

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 :)
28.03.2011
cruX 803 1 1 9
Was wird bei dir in Zeile 4 ausgeführt? Da du das englische Betriebssystem explizit ansprichst, arbeitest du evtl. mit länderspezifischen Werten?
Konstantin 28.03.2011
1
Was wird bei dir in Zeile 4 ausgeführt? Da du das englische Betriebssystem explizit ansprichst, arbeitest du evtl. mit länderspezifischen Werten?
Konstantin 28.03.2011
3 Antworten
1
Fehler gefunden!

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 ;).

Trotzdem Danke für die Antworten.
Gruß Andy
28.03.2011
cruX 803 1 1 9
Besse wäre es mit "File.Exists" statt mit Try-Catch zu arbeiten.
Floyd 29.03.2011
1
Oder wird die Datei von Server nachgeladen? (Also Client-Seitig)
Floyd 29.03.2011
Nein, die Datei wird mitkompiliert und dann aus der Assembly gelesen. deshalb verwende ich auch kein File.Exist() o.ä.
cruX 31.03.2011
0
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)
28.03.2011
Jens Duczmal 2,6k 1 3 9
Nein, ich vermeide generell Sonderzeichen oder allg. irgendwelche Zeichen außerhalb von ASCII bei der Programmierung. Das kann ich definitiv ausschließen.
cruX 28.03.2011
0
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:
_language = System.Threading.Thread.CurrentThread.CurrentUICulture.LCID;

dannach setze ich die Sprache mit folgender Zeile:
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(_languageGui);


Hier hab ich noch den StackTrace, falls der weiterhilft.

at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
at System.Windows.Application.DoStartup()
at System.Windows.Application.<.ctor>b__1(Object unused)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

Ich denke mal, der Fehler wird hier im dem Konstruktor liegen, bzw in der Methode, die aufgerufen wird!

Danke schonmal.
Gruß Andy
28.03.2011
cruX 803 1 1 9
cruX 803 1 1 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH