Entwickler-Ecke
IO, XML und Registry - *.csproj aswählen, aber alle dazugehörigen *.cs anzeigen!?
Luna1987 - Di 10.03.09 08:43
Titel: *.csproj aswählen, aber alle dazugehörigen *.cs anzeigen!?
Hy @ all.
Habe wiedermal ein Problem, für welches ich nach ewigen googeln immer noch keine Lösung gefunden habe :-(
Ich kann zwischen verschiedenen RadioButtons auswählen, ob ich ein Verzeichnis, eine Datei (*.cs) oder eine Projektdatei (*.csproj) auswählen möchte.
Bei dem Verzeichnis werden mir alle darin befindlichen *.cs Datein in einer ListBox ausgegeben.
Bei der Dateiauswahl wird mir die Datei bzw. die Dateien (*.cs) in der ListBox angezeigt.
Bei der Projektauswahl zeitg er momentan nur die *.csproj Datei an. Ich möchte aber die dazugehörigen *.cs Dateien in der ListBox angezeigt bekommen.
Wie kann ich das realisieren, geht das überhaupt?
Hoffe mir kann jemand helfen.
Danke.
Moderiert von
Christian S.: Topic aus Basistechnologien verschoben am Di 10.03.2009 um 08:40
JüTho - Di 10.03.09 10:24
Hallo,
die csproj-Datei ist eine (fast) stinknormale xml-Datei. Sie kann also mit den Möglichkeiten der XmlDocument-Klasse (vielleicht auch XmlDataDocument, aber das bezweifle ich) gelesen und bearbeitet werden. Über "compile include" findest Du alle beteiligten Dateien, z.B.:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| <ItemGroup> // hier ist ein Formular <Compile Include="AnalyzingForm.cs"> <SubType>Form</SubType> </Compile> <Compile Include="AnalyzingForm.Designer.cs"> <DependentUpon>AnalyzingForm.cs</DependentUpon> </Compile> // hier ist ein typisiertes DataSet <Compile Include="ConverterDataSet.cs"> <SubType>Component</SubType> </Compile> <Compile Include="ConverterDataSet.Designer.cs"> <DependentUpon>ConverterDataSet.cs</DependentUpon> </Compile> |
Gruß Jürgen
Luna1987 - Di 10.03.09 12:38
Hallo Jürgen.
Erstmal danke für deine Antwort. Aber komme dennoch nicht so recht weiter. Ich öffne also die *.csproj Datei mit
C#-Quelltext
1: 2:
| XmlDocument doc = new XmlDocument(); doc.Load("test.csproj"); |
Und dann?
Habe das mit dem "compile-include" nicht so recht verstanden?
Danke.
JüTho - Di 10.03.09 15:04
Hallo,
Du musst alle Knoten einer <ItemGroup> (anscheinend jeder <ItemGroup>) durchgehen: Wenn es sich um einen Knoten vom Typ "Compile" und dem Attribut "Include" handelt, gehört der Text des Attributs als Dateiname zur Liste. Das geht etwa so:
C#-Quelltext
1: 2: 3:
| XmlNode xroot = xdoc.DocumentElement; foreach(XmlNode node in xroot.ChildNodes[1].ChildNodes) { if (node.LocalName == "Compile" && node.Attributes.Contains("Include")) { ... |
Hier fehlt auf jeden Fall noch die Prüfung, dass ich mich innerhalb des richtigen ItemGroup-Knoten befinde; ob LocalName die richtige Abfrage ist, weiß ich auch nicht, ebensowenig die Attribute-Prüfung. (Ich habe gerade mal eine xml-Datei analysiert.) Aber zumindest zusammen mit der
SDK-Doku/MSDN solltest Du damit weiterkommen.
Gruß Jürgen
Luna1987 - Fr 13.03.09 12:11
Hy Jürgen.
Okay, danke für deine Hilfe, kann nun weiter genauer suchen, da ich einige Hinweise erhalten habe von dir.
Danke :-)
Luna1987 - Di 17.03.09 08:44
So, das Problem ist gelöst :lol:
Für alle die es interessiert bzw. dasselbe Problem haben/hatten, hier ein Teil des Codes. (Um den Code besser zur verstehen, sollte man einfach eine csproj Datei als XML Dokument öffnen, dann kann man das mit den Elemente besser nachvollziehen)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| XmlDocument csproj = new XmlDocument(); csproj.Load("Pfad für die csproj Datei");
XmlNodeList itemGroups = csproj.GetElementsByTagName("ItemGroup"); foreach (XmlNode itemGroup in itemGroups) { XmlNode compile = itemGroup["Compile"]; while (true) { if (compile == null) { break; } _selectedFilesListBox.Items.Add(compile.Attributes["Include"].InnerText); compile = compile.NextSibling; } } |
Danke an alle, die mir geholfen haben :-)
JüTho - Di 17.03.09 10:26
Freut mich, Anne :lol: Das ist ja noch einfacher, als ich erwartet hatte. Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!