1

csprojファイルから参照のリストを読んでいる古い(しかし良い)人にフォローアップの質問をしたいと思います(ただし、私はその質問の作成者ではありません)。

csproj ファイルの解析では、子としてLink要素を持つすべてのCompile要素を選択する必要があります。

最初に、リンクされた質問への回答を次のように拡張しようとしました。

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の初心者ですが、「Where」節には、「要素には子があり、それらの子の少なくとも1つはLinkという名前です」と書かれています。それは間違っていますか?

助けていただければ幸いです。

4

1 に答える 1

3

名前空間の問題だと思います。「リンク」に名前空間を使用していません。これを試して:

IEnumerable<string> links = csprojFile
        .Element(msbuild + "Project")
        .Elements(msbuild + "ItemGroup")
        .Elements(msbuild + "Compile")
        .Where(element => element.Descendants(msbuild + "Link").Any())
        .Attributes("Include")
        .Select(attr => attr.Value);

(HasElementsは実際には必要ありません。)

于 2009-11-16T19:53:41.203 に答える