длина установки всегда равна 0, поэтому код переходит к возврату оператора if, которого не должно быть, и я не могу понять, почему, poperty устанавливается как «TreatWarningsAsErrors» " Мне нужно сравнить значение узла, указанного в строке propertyName.C# array всегда имеет длину 0
public string CheckSettings(XElement propertyGroup, string groupName, string propertyName)
{
var setting = (from doc in propertyGroup?.Descendants(propertyName) select doc).ToArray();
if (setting.Length == 0)
{
return groupName + ": " + propertyName + " is missing";
}
var allOk = setting.All(n => n.Value.Equals("true", StringComparison.InvariantCultureIgnoreCase));
return allOk ? null : groupName + ": " + propertyName + " has wrong state.";
}
пример XML
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\..\..\..\Bin\AlfaStandardXmlManifest\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<DocumentationFile>..\..\..\..\..\..\Bin\AlfaStandardXmlManifest\AlfaStandardXmlManifest.XML</DocumentationFile>
<CodeAnalysisRuleSet>..\..\..\..\Build\FxCopSoftship_ZeroTolerance.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>false</RunCodeAnalysis>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>
Добавлена XML нагрузки и settigns проверить вызов:
var xmlDoc = XDocument.Load(projectFilePath);
XNamespace nameSpace = xmlDoc.Root?.Name.Namespace;
if (xmlDoc.Root != null)
{
var groups = xmlDoc.Root.Descendants(nameSpace + "PropertyGroup").ToArray();
foreach (var group in groups)
{
result.Add(CheckSettings(group, GroupName(group), "RunCodeAnalysis"));
result.Add(CheckSettings(group, GroupName(group), "TreatWarningsAsErrors"));
Вот что отладчик дал мне для группы
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\..\..\..\Bin\AlfaStandardXmlManifest\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<DocumentationFile>..\..\..\..\..\..\Bin\AlfaStandardXmlManifest\AlfaStandardXmlManifest.XML</DocumentationFile>
<CodeAnalysisRuleSet>..\..\..\..\Build\FxCopSoftship_ZeroTolerance.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>false</RunCodeAnalysis>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>
'ToArray()' никогда не может вернуть значение null. в чем именно проблема?: – SLaks
@SLaks код всегда, кажется, перепрыгивает в return внутри оператора if, который не должен – Pagodatree
Это не то же самое, что он возвращает null, не так ли? Это означает, что результатов нет, что немного отличается. Я предполагаю, что ваш запрос неверен, имя, вероятно, имеет пространство имен, отличное от значения по умолчанию. Вам нужно предоставить [mcve]. –