3

我正在使用 csproj 文件,并且正在尝试编写一个 cmdlet 来提取项目文件引用的所有文件。这将包括所有 Compile、EmbeddedResource、Resource、Content 和 None 元素(更重要的是,它们的 @Include 值),但我特别想排除 Reference 元素,因为它们引用了我不关心的 dll。

我没有很多经验,但我认为我想要的 xpath 表达式看起来像这样

$projectFile | Select-Xml -namespace @{msb="http://schemas.microsoft.com/developer/msbuild/2003"} -xpath "//msb:ItemGroup/*[not(self::node() = msb:Reference) and @Include]"

但是,一旦我尝试引入 self::node(),我的表达式就不会返回任何节点。我不是 100% 确定 self::node() 是这样做的正确方法。知道我会改变什么以使其在概念上返回“所有包含节点的属性值,这些节点不是作为 ItemGroup 元素的子元素的 Reference 元素的节点?”

4

1 回答 1

5

我认为你需要:

//msb:ItemGroup/*[not(self::msb:Reference)]/@Include

含义: 整个文档中除,的任何子项的所有属性Includemsb:ItemGroupmsb:Reference

于 2011-02-11T23:45:18.990 回答