Per calcolare alcune metriche con Source Monitor sui sorgenti del progetto a cui sto lavorando ho fatto una piccola utility che estrae i path di tutti i file con estensione cs che non siano user interface (UserControl, WindowsForms, ecc.) da un file di progetto .csproj.
La classe che contiene la logica è la seguente:
public class ProjectFilesReader
{
public ProjectFilesReader()
{
}
public string[] ReadCodeFilesList(string path)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNodeList nodes = xmlDoc.SelectNodes(@"/VisualStudioProject/CSHARP/Files/Include/File[@SubType='Code']");
StringCollection files = new StringCollection();
foreach(XmlNode node in nodes)
files.Add(node.Attributes["RelPath"].Value);
string[] filesArray = new string[files.Count];
files.CopyTo(filesArray, 0);
return filesArray;
}
}
Notare il parametro SubType='Code' che permette di filtrare i file per tipo. Altri possibili valori per SubType sono: Form, UserControl, Component, ecc.