我正在处理 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 元素的子元素吗?”
最佳答案
我认为你需要:
//msb:ItemGroup/*[not(self::msb:Reference)]/@Include
含义: msb:ItemGroup
的任何子项的所有 Include
属性,msb:Reference除外
,在整个文档中
关于Xpath 不是通过 Powershell 在 Select-Xml 中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975014/