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.