Надявам се, че мога да получа малко помощ за тази скриптова гърбица. Опитвам се да анализирам този XML. В момента това се прави чрез C#, но се опитвам да го пренапиша в powershell.
<CodeMetricsReport Version="10.0">
<Targets>
<Target Name="C:\Builds\APP\APP_v1.0.0\Data.dll">
<Modules>
<Module Name="Data.dll" AssemblyVersion="1.0.0" FileVersion="1.0.0">
<Metrics>
<Metric Name="MaintainabilityIndex" Value="84" />
<Metric Name="CyclomaticComplexity" Value="39" />
<Metric Name="ClassCoupling" Value="14" />
<Metric Name="DepthOfInheritance" Value="1" />
<Metric Name="LinesOfCode" Value="101" />
</Metrics>
</Module>
</Modules>
</Target>
</Targets>
</CodeMetricsReport>
Това е фрагмент от C# кода, който в момента използвам, за да анализирам горния XML.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(MetricsFileName);
XmlNodeList modules = xmlDoc.SelectNodes("/CodeMetricsReport/Targets/Target/Modules/Module");
foreach (XmlNode module in modules)
{
foreach (XmlNode nodes in module)
{
switch (nodes.Name)
{
case "Metrics":
foreach (XmlNode metric in nodes)
{
switch (metric.Attributes["Name"].Value)
{
case "MaintainabilityIndex":
Console.WriteLine("MaintainabilityIndex={0}", metric.Attributes["Value"].Value);
break;
}
}
}
}
}
Това е PowerShell, който съм измислил досега, но имам малък проблем.
[xml]$xmlDoc = New-Object System.Xml.XmlDocument
$xmlDoc.Load($MetricsFileName)
$modules = $xmlDoc.SelectNodes("/CodeMetricsReport/Targets/Target/Modules/Module")
foreach ($module in $modules)
{
foreach ($nodes in $module)
{
Switch ($nodes.Name)
{
"Metrics"
{
foreach ($metric in $nodes)
{
Switch ($metric.Attributes["Name"].Value)
{
"MaintainabilityIndex"
{
Write-Host ("MaintainabilityIndex={0}" -f $metric.Attributes["Value"].Value)
}
}
}
}
}
}
}
Когато скриптът достигне оператора Switch, $nodes.Name се оценява на "Data.dll" вместо името на елемента "Metrics", така че скриптът никога не продължава напред.
Преглеждах този скрипт от известно време и не мога да разбера как да го коригирам. Всякакви насоки са много ценени! Ако има по-добър начин, ще се радвам да чуя и за него.