Autor Beitrag
Luna1987
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

WinXP

BeitragVerfasst: Di 10.03.09 08:43 
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 user profile iconChristian S.: Topic aus Basistechnologien verschoben am Di 10.03.2009 um 08:40
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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.:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

WinXP

BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

WinXP

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

WinXP

BeitragVerfasst: 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)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
// öffne die die .csproj Datei als XML Datei
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 17.03.09 10:26 
Freut mich, Anne :lol: Das ist ja noch einfacher, als ich erwartet hatte. Jürgen