Variable Falsch? Eine Ausnahme vom Typ "System.ArgumentNullException"

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von sourceone.

    Variable Falsch? Eine Ausnahme vom Typ "System.ArgumentNullException"

    Hi, ich stehe vor folgendem Problem:

    Ich versuche momentan eine XML File in ein Word Dokument per Stream zu übergeben.
    Die XML File lasse ich mir im Internet generieren. Sobald die XML generiert ist, übergebe ich die Inhalte
    an ein Word Dokument weiter und setze die Inhalte in Steuerelemente wie z. B. PlainTextControl.

    Es hat soweit auch alles Funktioniert, jetzt habe ich mich heute wieder dran gesetzt und bekomme folgende Fehlermeldung:

    Eine Ausnahme vom Typ "System.ArgumentNullException" ist in mscorlib.dll aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

    Kann es sein das ich die Variable Falsch gesetzt habe? Bzw. meinen Stream?

    Visual Basic-Quellcode

    1. [/color]

    Visual Basic-Quellcode

    1. Public Function GetXmlFromResource() As String
    2. Dim asm As System.Reflection.Assembly =
    3. System.Reflection.Assembly.GetExecutingAssembly()
    4. Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream(
    5. "XMLDoc.result.xml")
    6. Using resourceReader As System.IO.StreamReader =
    7. New System.IO.StreamReader(stream1)
    8. 'stream1 = asm.GetManifestResourceStream(
    9. ' "XMLDoc.result.xml")
    10. If resourceReader IsNot Nothing Then
    11. Return resourceReader.ReadToEnd()
    12. End If
    13. End Using
    14. Return Nothing
    15. End Function


    hier wird mir der oben genannte Fehler angezeigt:


    Visual Basic-Quellcode

    1. [/color]Using resourceReader As System.IO.StreamReader =
    2. New System.IO.StreamReader(stream1)[color=#000000]


    Für mich wäre die einzige Lösung folgende:
    (Im obigen Code auskommentiert).

    Visual Basic-Quellcode

    1. [/color]'stream1 = asm.GetManifestResourceStream(
    2. ' "XMLDoc.result.xml")[color=#000000]



    Ich hoffe mir kann jemand Helfen bzw. wie habe ich diesen Fehler zu verstehen und wie kann ich diesen beheben?

    Viel Dank schon mal

    Gruß
    SourceOne
    @sourceone Willkommen im Forum. :thumbup:
    Ich würde mal behaupgten, dass die Variable stream1 Nothing ist.
    Setze einen Haltepunkt drauf und sieh Dir den Inhalt der Variable(n) an.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hey Danke!

    Den Haltepunkt habe ich bereits ausprobiert und es wird mir auch ausgegeben das der Wert nicht Null sein darf,
    jedoch dachte ich das ich hiermit

    Visual Basic-Quellcode

    1. Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream(
    2. "XMLDoc.result.xml")​


    dem programm sage..."Schaue in der result.xml"

    Oder habe ich da etwas falsch verstanden?

    Achja und vielen Dank für die flotte Antwort :thumbsup:


    Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream( "XMLDoc.result.xml") Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream( "XMLDoc.result.xml")[/list]

    sourceone schrieb:

    "XMLDoc.result.xml"
    Wo befindet sich diese Datei bzw. deren Inhalt?
    Vielleicht probierst Du mal

    VB.NET-Quellcode

    1. Dim stream1 As System.IO.Stream = IO.File.OpenRead(PFAD & "XMLDoc.result.xml")

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das hatte ich auch schon versucht :)

    Eine Ausnahme vom Typ "System.ArgumentNullException" ist in mscorlib.dll aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

    Die Fehlermeldung bedeutet dich das ich etwas deklariert habe, aber nicht verwendet habe?!?!

    Also kann die result.xml nicht gefunden werden.
    Die XML befindet sich im Projektordner unter:

    Visual Studio 2015\Projects\XMLDoc\XMLDoc & XMLDoc.result.xml

    deren Inhalt gelesen werden soll.

    Das heißt, das

    Visual Basic-Quellcode

    1. Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream(
    2. "XMLDoc.result.xml")


    zieht quasi keine Daten.

    ?(

    [EDIT]
    Ouuu Maaan...

    Hatte die Datei nicht als Eingebettete Ressource!!

    Mein Fehler haha

    Man muss nur den Brotkrumen zurück verfolgen Danke dir.

    Ohne deine Hilfe wäre ich nicht auf das GetManifest gekommen.

    Reife Leistung.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „sourceone“ ()

    sourceone schrieb:

    Die Fehlermeldung bedeutet dich das ich etwas deklariert habe, aber nicht verwendet habe
    Gugst Du MSDN:
    Rückgabewert
    Type:
    System.IO.Streamnull if no resources were specified during compilation or if the resource is not visible to the caller.">Die Manifestressource oder null, wenn während des Kompilierens keine Ressourcen angegeben wurden oder wenn die Ressource für den Aufrufer nicht sichtbar ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi ihr Lieben,

    erstmal vielen Dank für die vorherigen Antworten.

    Sitze nun vor einem neuen Problem.

    Weiterhin geht es um das übergeben eines XML Inhalts an ein Word Dokument.

    Nun bin ich an folgendem Punkt angelangt:

    Hiermit kann ich z.B. die Sprachkenntnisse aus einem Profil ausgeben lassen:

    Visual Basic-Quellcode

    1. ​Dim xPathLanguage1 As String = "ns:cv/ns:additionalInformation/ns:language/ns:name" 'PlainTextContentControl5
    2. Me.PlainTextContentControl5.XMLMapping.SetMapping(xPathLanguage1,
    3. prefix, resultXMLPart)


    Gehen davon aus, die Person spricht mehr als nur eine Sprache und diese ist im Profil etwa so aufgestellt:

    Sprachkenntnisse: Deutsch, Englisch

    Die Zelle "Deutsch" kann ich erfolgreich übergeben. (Aus XML in Doc)

    XML-Quellcode

    1. ​-<additionalInformation>
    2. -<language>
    3. <code>DE</code>
    4. <name>Deutsch</name>
    5. -<level>
    6. <code>C2</code>
    7. <name>Perfekte Kenntnisse oder Muttersprache</name>
    8. </level>
    9. </language>
    10. -<language>
    11. <code>EN</code>
    12. <name>Englisch</name>
    13. -<level>
    14. <code>C1</code>
    15. <name>Sehr gute Kenntnisse</name>
    16. </level>
    17. </language>


    Nun lautet meine Frage:

    Wie kann ich die zweite Sprache aus der XML ziehen? Bzw. wie spreche ich den Inhalt an?

    Wie oben im VB ausschnitt zu erkennen ist, mache ich das hiermit:

    ns:cv/ns:additionalInformation/ns:language/ns:name"


    Da der Pfad für die zweite Sprache der selbe ist, kommt es zu keiner Ausgabe.
    Kann ich in VB eine DO...LOOP dafür verwenden?
    Wenn ja, wie genau?
    Bin mit meinem Wissen bzw. Einfällen am Ende :)
    @sourceone Poste bitte einen XML-Code, der tatsächlich ein XML-Code ist.
    Teste dies an einem XML-Viewer, z.B. dem IE, FF oder so.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ups, Sorry :)

    Danke für den Hinweis.

    Wie schaut es jetzt aus?

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <cv xmlns="http://hr.joinvision.com/xml/3_0">
    3. -<additionalInformation>
    4. -<language>
    5. <code>DE</code>
    6. <name>Deutsch</name>
    7. -<level>
    8. <code>C2</code>
    9. <name>Perfekte Kenntnisse oder Muttersprache</name>
    10. </level>
    11. </language>
    12. -<language>
    13. <code>EN</code>
    14. <name>Englisch</name>
    15. -<level>
    16. <code>C1</code>
    17. <name>Sehr gute Kenntnisse</name>
    18. </level>
    19. </language>
    20. </additionalInformation>
    21. </cv>

    sourceone schrieb:

    Wie schaut es jetzt aus?
    Du musst Dich davon überzeugen :!:
    Nein, Dein Post funktioniert noch nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So jetzt aber...

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <cv xmlns="http://hr.joinvision.com/xml/3_0">
    3. -<additionalInformation>
    4. -<language>
    5. <code>DE</code>
    6. <name>Deutsch</name>
    7. -<level>
    8. <code>C2</code>
    9. <name>Perfekte Kenntnisse oder Muttersprache</name>
    10. </level>
    11. </language>
    12. -<language>
    13. <code>EN</code>
    14. <name>Englisch</name>
    15. -<level>
    16. <code>C1</code>
    17. <name>Sehr gute Kenntnisse</name>
    18. </level>
    19. </language>
    20. </additionalInformation>
    21. </cv>
    @sourceone OK.
    Das nennt sich Sibling.
    Frage Frau Google nach: XDocument sibling
    Antwort z.B. dies.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich komme nicht drauf...?
    Ich habe folgendes:

    Visual Basic-Quellcode

    1. Dim xPathLanguage1 As String = "ns:cv/ns:additionalInformation/ns:language/ns:name" 'PlainTextContentControl5
    2. Me.PlainTextContentControl5.XMLMapping.SetMapping(xPathLanguage1,
    3. prefix, resultXMLPart)
    4. Dim xPathLanguage2 As String = "ns:cv/ns:additionalInformation/ns:language/ns:name" 'PlainTextContentControl13
    5. Me.PlainTextContentControl13.XMLMapping.SetMapping(xPathLanguage2,
    6. prefix, resultXMLPart)


    Die Ausgabe hierzu ist: Deutsch, Deutsch

    In xPathLanguage1 steht "Deutsch" dies wird auch übergeben.
    Wie bekomme ich xPathLanguage2 ausgegeben?

    Habe es mit dem Link von RodFromGermany versucht...sieht eigentlich ziemlich logisch aus, nur ich raffs nicht ganz.

    Habe es unter anderem so versucht:

    Visual Basic-Quellcode

    1. Dim xPathLanguage1 As String = "ns:cv/ns:additionalInformation/ns:language[name='1']/ns:name" 'PlainTextContentControl5
    2. Me.PlainTextContentControl5.XMLMapping.SetMapping(xPathLanguage1,
    3. prefix, resultXMLPart)
    4. Dim xPathLanguage2 As String = "ns:cv/ns:additionalInformation/ns:language[name='2']/ns:name" 'PlainTextContentControl13
    5. Me.PlainTextContentControl13.XMLMapping.SetMapping(xPathLanguage2,
    6. prefix, resultXMLPart)


    Spreche ich evtl. die falsche Zelle an?

    Eigentlich müsste ich es so ansprechen:

    Visual Basic-Quellcode

    1. Dim xPathLanguage1 As String = "ns:cv/ns:additionalInformation[language='1']/ns:name" 'PlainTextContentControl5
    2. Me.PlainTextContentControl5.XMLMapping.SetMapping(xPathLanguage1,
    3. prefix, resultXMLPart)
    4. Dim xPathLanguage2 As String = "ns:cv/ns:additionalInformation[language='2']/ns:name" 'PlainTextContentControl13
    5. Me.PlainTextContentControl13.XMLMapping.SetMapping(xPathLanguage2,
    6. prefix, resultXMLPart)


    Da es den Punkt language 2 mal gibt, muss ich doch hier erst den unterschied setzen, damit das Programm weiß in welchem language es sich befindet?!?!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sourceone“ ()

    sourceone schrieb:

    den unterschied setzen
    Wenn da mehrere parallele Einträge drin sind, musst Du durchiterieren, bis Du den richtigen gefunden hast.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke Leute für die Infos.

    Habe es bei den Sprachkenntnissen momentan noch etwas unschön gelöst, dafür aber bei weiteren punkten
    eine Wiederholung einarbeiten können.

    Visual Basic-Quellcode

    1. ​Dim xPathLanguage As String = "ns:cv/ns:additionalInformation/ns:language[1]/ns:name" 'PlainTextContentControl5
    2. Me.PlainTextContentControl5.XMLMapping.SetMapping(xPathLanguage,
    3. prefix, resultXMLPart)
    4. Dim xPathLanguage2 As String = "ns:cv/ns:additionalInformation/ns:language[2]/ns:name" 'PlainTextContentControl13
    5. Me.PlainTextContentControl13.XMLMapping.SetMapping(xPathLanguage2,
    6. prefix, resultXMLPart)


    Kurz und Schmerzlos :)

    Wird aber noch durch iteriert wie RodFromGermany es vorgeschlagen hat.

    Besten Dank dafür.

    Und natürlich Danke an alle anderen.

    Die Tuts werde ich mir nochmal anschauen.

    Bis demnächst :)
    Hey Leute,

    Danke noch mal für eure Hilfe. Das Konvertieren von XML zu docx klappt super.

    Nun kam ich erst auf die Idee eine GUI dazu zu erstellen. Habe mal in einem neuen Projekt damit angefangen.
    Habe mal geschaut wie man 2 Projekte miteinander Verbinden kann
    Leider blicke ich das nicht so ganz.

    Muss ich die dll (bzw. welche Dateien genau?) von einem Projekt in das andere kopieren, sodass ich die Projekte verbinden kann?

    Wenn ich z.b.: auf einen Button klicke zum Konvertieren der XML zu docx, kann ich bei diesem Button folgendes hinterlegen?

    Visual Basic-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. 'Action when Button is clicked
    3. XMLDoc.Show()
    4. End Sub



    Hier mal mein Versuch:
    Oben der Import des anderen Projekts und bei Button2 mein Aufrufversuch.


    Visual Basic-Quellcode

    1. Imports Namespace.XMLDoc
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. End Sub
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. 'ofd.Filter = "(*txt)|*.txt"
    7. If (ofd.ShowDialog() = DialogResult.OK) Then
    8. TextBox1.Text = ofd.FileName
    9. End If
    10. End Sub
    11. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    12. 'Action when Button is clicked
    13. Dim ThisDocument As New XMLDoc()
    14. ThisDocument.Show()
    15. End Sub
    16. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    17. Application.Exit()
    18. End Sub
    19. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    20. End Sub
    21. End Class


    Bin für jede Hilfe Dankbar.

    Beste Grüße

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „sourceone“ ()

    Ich täte empfehlen, du stellst deine Fragen präziser.
    Wenn du eine Frage stellst, stell dir einen Menschen vor, der alles weiß, nur die Frage nicht. Was würde so ein Mensch auf deinen Post antworten?
    Zu

    sourceone schrieb:

    Oben der Import des anderen Projekts und bei Button2 mein Aufrufversuch.
    kann man eiglich garnix antworten: "Fein - und funktionierts?" - nur um die Kommunikation aufrecht zu erhalten.
    Darauf du vielleicht: "nein, funktioniert nicht so wie soll".
    Darauf Mr. Allwissend: "Aha, und was funktioniert denn nicht, wies soll?
    Wie soll es überhaupt funktionieren?"
    usw.
    also gut gestellte Fragen können Threads erheblich zielführender machen, und sind für alle Beteiligten weniger frustrierend.
    Mein Fehler, Sorry!
    Danke für deine Antwort.

    Also, um 2 Projekte zu verbinden, was genau muss da getan werden?
    Reicht es wenn ich die Imports im Quellcode des Hauptprojekts (in diesem Fall die GUI) einfüge?

    So wie ich es gemacht habe, gibt er mir die Fehlermeldung in Zeile 17 "Der Typ XMLDoc ist nicht definiert".
    Kann man hier eine Klasse als Friend einbinden?
    Oder ist mein Import falsch? Also in Zeile 1'?

    sourceone schrieb:

    Kann man hier eine Klasse als Friend einbinden?
    Diese Frage ergibt keinen Sinn. Friend ist ein Schlüsselwort, was einen Gültigkeitsbereich festlegt.
    Etwas "als Friend einbinden" ergibt keinen Sinn. Überhaupt kann man niemals etwas als iwas anderes einbinden. Man bindet etwas ein oder nicht. Wobei "Einbinden" auch wieder vielerlei bedeuten kann.

    Also was man machen kann, sind 3 Dinge:
    1. auf eine Dll kann man einen Verweis setzen
    2. Dann kann man Namespaces dieser Dll mittels Imports-Schlüsselwort importieren. Man kann auch einzelne Klassen auf diese Weise importieren - das wirkt sich aber nur auf deren statische Member aus.
    3. Ausserdem kann man Klassen dieser Dll dann instanzieren - mittels des New-Schlüsselwortes.
      Die Klassen müssen dafür aber in der Dll entsprechend angelegt sein, mit Gültigkeitsbereich Public - (nicht Friend)
    Letzteres failt bei dir - offensichtlich versuchst du eine Klasse zu instanzieren, die es unter dem angegebenen Namen nicht gibt.
    Das kann verschiedene Gründe haben:
    1. Die Klasse gibts halt nicht
    2. Die Klasse ist nicht entsprechend angelegt, etwa nicht Public, oder unterbindet die Verwendung des New-Schlüsselworts
    3. Die Klasse heisst anders
    Bei letzterem beachte, dass der wirkliche Name einer Klasse, der sog. "vollqualifizierte" Name immer viel länger ist, denn der Namespace ist mit anzugeben.
    Etwa ein Button ist nur dank geeigneter Importe einfach als Button anzusprechen - eigentlich - vollqualifiziert - anzusprechen ist er als System.Windows.Forms.Button.

    Also finde als erstes heraus, ob deine XmlDoc-Klasse Instanzierungen von ausserhalb ihrer Dll ühaupt zulässt, und dann finde ihren vollqualifizierten Namen heraus.

    Für ersteres musste ihren Code angucken, für letzteres kannste gut den ObjectBrowser verwenden, aber eins nach dem anderen.