Я хотел бы задать дополнительный вопрос старому (но вкусному) Чтение списка ссылок из файлов csproj (хотя я не являюсь автором этого вопроса).
В моем анализе файлов csproj мне нужно выбрать все Компилировать элементы, которые имеют Link элемент как дочерний.
Сначала я попытался расширить ответ на связанный вопрос следующим образом:
IEnumerable<string> links = csprojFile
Element(msbuild + "Project")
.Elements(msbuild + "ItemGroup")
.Elements(msbuild + "Compile")
.Where(element => element.HasElements)
.Attributes("Include")
Что явно недостаточно, так как он выбирает все элементы, у которых есть дочерние элементы любого типа (поэтому, выбирая те, которые я хочу, он также выбирает дополнительные элементы). Тогда я попробовал:
IEnumerable<string> links = csprojFile
.Element(msbuild + "Project")
.Elements(msbuild + "ItemGroup")
.Elements(msbuild + "Compile")
.Where(element => element.HasElements && element.Descendants("Link").Any())
.Attributes("Include")
.Select(element => element.Value);
... который ничего не возвращает. Я новичок в Linq в целом и в Linq2XML в частности, но для меня это предложение «Где» гласит: «где элемент имеет детей, и по крайней мере один из этих детей называется Link». Это неправильно?
Помощь очень ценится.