Benutzer mit den meisten Antworten
NullReferenceException, die nur produktiv auftritt

Frage
-
Hallo alle,
ich bekomme beim Ausfuehren einer exe- Datei in einem Konstruktor eine NullReferenceException, da offensichtlich eine interne Liste nicht vollstaendig gefuellt wird. Fuehre ich das Programm im VisualStudio (2015) aus, laeuft es durch.
Im Detail:
Aus XML (config.xml):
<ab123> <article ekwert="19.02" ausschuss="1.03" name="betaetigung">111000009</article> <article ekwert="5.40" ausschuss="1.03" name="rastgestaenge">111000309</article> <article ekwert="12.43" ausschuss="1.03" name="SG15">124001009</article> <article ekwert="12.43" ausschuss="1.03" name="SG26">124002009</article> <article ekwert="12.43" ausschuss="1.03" name="SG37">124003009</article> <article ekwert="12.43" ausschuss="1.03" name="SG4R">124004009</article> </ab123>
lese ich wie folgt:
foreach (XmlElement item in config.GetElementsByTagName("article")) { AB123 ab123 = new AB123(); ab123.Artikel = item.InnerXml; ab123.Ausschuss = Convert.ToSingle(item.GetAttribute("ausschuss"), CultureInfo.InvariantCulture); ab123.EkWert = Single.Parse(item.GetAttribute("ekwert"), CultureInfo.InvariantCulture); ab123.Name = item.GetAttribute("name"); SessionContext.Ab123Teile.Add(ab123); }
Zur Speicherung bediene ich mich einer SessionContext- Klasse: (Ausschnitt)
class SessionContext { //Liste für AB123 Artikel public static List<AB123> Ab123Teile = new List<AB123>(); }
Die Klasse AB123 hat folgende Felder:
public class AB123 { public string Artikel { get; set; } public float EkWert { get; set; } public float Ausschuss { get; set; } public string Name { get; set; } }
In meiner Klasse "Quality" lese ich die gespeicherten Artikelnummern aus, mittels (als Klassenmember):
private string _sg15 = SessionContext.Ab123Teile.FirstOrDefault(x => x.Name == "SG15").Artikel; private string _sg26 = SessionContext.Ab123Teile.FirstOrDefault(x => x.Name == "SG26").Artikel; private string _sg37 = SessionContext.Ab123Teile.FirstOrDefault(x => x.Name == "SG37").Artikel; private string _sg4r = SessionContext.Ab123Teile.FirstOrDefault(x => x.Name == "SG4R").Artikel; private string _bet = SessionContext.Ab123Teile.FirstOrDefault(x => x.Name == "betaetigung").Artikel; private string _rast = SessionContext.Ab123Teile.FirstOrDefault(x => x.Name == "rastgestaenge").Artikel;
Und hier tritt die NullReferenceException auf. In der Produktivumgebung ist x.Name leer (""). Im VisualStudio enthaelt x.Name (z.B.) "SG15", so wie erwartet.
Jemand eine Idee?
Heiko
Antworten
-
Hallo Heiko,
hast Du dir mal item.innerXML angeschaut und geprüft, ob dort überhaupt in "name" was drin steht?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 6. September 2017 21:51
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 15. September 2017 11:41
-
Ach Sh*t
Fehler gefunden. Ich habe die config.xml nur auf der Entwicklungsseite mit "name" angepasst. Und nicht auch auf Produktivseite.
Test, und siehe da: Kaum macht man es richtig, schon funktioniert's.
Danke fuer die Zeit.
- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 6. September 2017 21:51
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 15. September 2017 11:41
Alle Antworten
-
Hallo Heiko,
zeig mal den Code bzw. den exakten Pfad, der im Programm für das Auslesen der XML Datei verwendet wird. Ich gehe davon aus, dass die Datei nicht dort gefunden wird, wo Du sie suchst und daher die Elementliste leer bleibt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
ich war etwas unpraezise: Die anderen Felder "Artikel","Ausschuss" und "Ekwert" werden gefuellt. (Aus Debug- Instanz)
(Vom Watch- Fenster)
SessionContext.Ab123Teile Count = 6 System.Collections.Generic.List<XYZ.Controlling.WeeklyLogchart.AB123>
[0] {XYZ.Controlling.WeeklyLogchart.AB123} XYZ.Controlling.WeeklyLogchart.AB123
Artikel "111000009" string
Ausschuss 1.03 float
EkWert 19.02 float
Name "" string
[1] {XYZ.Controlling.WeeklyLogchart.AB123} XYZ.Controlling.WeeklyLogchart.AB123
Artikel "111000219" string
Ausschuss 1.03 float
EkWert 5.4 float
Name "" string
[2] {XYZ.Controlling.WeeklyLogchart.AB123} XYZ.Controlling.WeeklyLogchart.AB123
Artikel "092001509" string
Ausschuss 1.03 float
EkWert 12.43 float
Name "" string
[3] {XYZ.Controlling.WeeklyLogchart.AB123} XYZ.Controlling.WeeklyLogchart.AB123
Artikel "092002509" string
Ausschuss 1.03 float
EkWert 12.43 float
Name "" string
[4] {XYZ.Controlling.WeeklyLogchart.AB123} XYZ.Controlling.WeeklyLogchart.AB123
Artikel "092003509" string
Ausschuss 1.03 float
EkWert 12.43 float
Name "" string
[5] {XYZ.Controlling.WeeklyLogchart.AB123} XYZ.Controlling.WeeklyLogchart.AB123
Artikel "092004509" string
Ausschuss 1.03 float
EkWert 12.43 float
Name "" string
Ansonsten:public static void LiesConfig() { XmlDocument config = new XmlDocument(); try { config.Load(@".\Config.xml"); _maildomain = config.SelectSingleNode("//maildomain").InnerXml; _recipients = config.SelectSingleNode("//recipients").InnerXml; _startLastWeek = DateTime.Parse(config.SelectSingleNode("//startlastweek").InnerXml); _endLastWeek = DateTime.Parse(config.SelectSingleNode("//endlastweek").InnerXml); _startLastMonth = DateTime.Parse(config.SelectSingleNode("//startlastmonth").InnerXml); _endLastMonth = DateTime.Parse(config.SelectSingleNode("//endlastmonth").InnerXml); _workday = DateTime.Parse(config.SelectSingleNode("//workday").InnerXml); foreach (XmlElement item in config.GetElementsByTagName("article")) { AB123 ab123 = new AB123(); ab123.Artikel = item.InnerXml; ab123.Ausschuss = Convert.ToSingle(item.GetAttribute("ausschuss"), CultureInfo.InvariantCulture); ab123.EkWert = Single.Parse(item.GetAttribute("ekwert"), CultureInfo.InvariantCulture); ab123.Name = item.GetAttribute("name"); SessionContext.Ab123Teile.Add(ab123); } } catch (FileLoadException fle) { System.Diagnostics.EventLog appLog = new System.Diagnostics.EventLog(); appLog.Source = "WeeklyLogchart"; appLog.WriteEntry("WeeklyLogcharts.Helpers.Config" + "\n" + Convert.ToString(fle)); } catch (FileNotFoundException fnfe) { System.Diagnostics.EventLog appLog = new System.Diagnostics.EventLog(); appLog.Source = "WeeklyLogchart"; appLog.WriteEntry("WeeklyLogcharts.Helpers.Config" + "\n" + Convert.ToString(fnfe)); } catch (XmlException xmle) { System.Diagnostics.EventLog appLog = new System.Diagnostics.EventLog(); appLog.Source = "WeeklyLogchart"; appLog.WriteEntry("WeeklyLogcharts.Helpers.Config" + "\n" + Convert.ToString(xmle)); } }
Gruesse
Heiko
-
Hallo Heiko,
hast Du dir mal item.innerXML angeschaut und geprüft, ob dort überhaupt in "name" was drin steht?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 6. September 2017 21:51
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 15. September 2017 11:41
-
Ich habe mir das mal an der Konsole ausgeben lassen.
Console.Write(item.InnerXml + "\n" + item.GetAttribute("ausschuss") + "\n" + item.GetAttribute("ekwert") + "\n" + item.GetAttribute("name") + "\n\n");
Starte ich das Programm von lokal (ausserhalb VS) wird item.GetAttribute("name") ausgegeben. Starte ich es vom Netz (via UNC- Pfad) wird item.GetAttribute("name") nicht ausgewertet. Alles andere ist i.O.
- Bearbeitet H.Sturm Dienstag, 5. September 2017 13:32 Ergaenzung
-
Hallo Heiko,
poste doch bitte mal exakt das, was da ausgegeben wird.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Ach Sh*t
Fehler gefunden. Ich habe die config.xml nur auf der Entwicklungsseite mit "name" angepasst. Und nicht auch auf Produktivseite.
Test, und siehe da: Kaum macht man es richtig, schon funktioniert's.
Danke fuer die Zeit.
- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 6. September 2017 21:51
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 15. September 2017 11:41
-
Fehler gefunden. Ich habe die config.xml nur auf der Entwicklungsseite mit "name" angepasst. Und nicht auch auf Produktivseite.
Sag ich doch :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community