我正在使用 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 元素的节点?”