Powershell命令无法读取XML

Powershell命令无法读取XML,powershell,visual-studio-2019,Powershell,Visual Studio 2019,我有一个powershell脚本,将用于增强“发布到文件夹”配置文件。我希望能够读取我的appsettings.json“versionNumber”属性,并将生成的文件四处移动,创建一个漂亮的zip文件。我意识到我可以用MSBUILD直接完成所有这些,但这是针对.net核心项目的,我担心不能正确完成。所以现在我使用的是PS脚本和发布配置文件 powershell脚本拒绝读取发布配置文件xml。以下是PS脚本: $foundPublishProfile = Test-Path '..\Prope

我有一个powershell脚本,将用于增强“发布到文件夹”配置文件。我希望能够读取我的appsettings.json“versionNumber”属性,并将生成的文件四处移动,创建一个漂亮的zip文件。我意识到我可以用MSBUILD直接完成所有这些,但这是针对.net核心项目的,我担心不能正确完成。所以现在我使用的是PS脚本和发布配置文件

powershell脚本拒绝读取发布配置文件xml。以下是PS脚本:

$foundPublishProfile = Test-Path '..\Properties\PublishProfiles\FolderProfile.pubxml'
if (!$foundPublishProfile)
{
    Write-Host 'ERROR: Expected to find "..\Properties\PublishProfiles\FolderProfile.pubxml"' -ForegroundColor DarkRed
    Write-Host ''
    exit
}

[xml] $publishProfileXML = Get-Content '..\Properties\PublishProfiles\FolderProfile.pubxml'
Write-Host $publishProfileXML
$publishFilePath = $publishProfileXML.SelectSingleNode('//Project/PropertyGroup/PublishUrl') #| Select-Object -Expand '#text'
#$publishFilePath = Select-Xml -XPath '//Project/PropertyGroup/PublishUrl' -Path '..\Properties\PublishProfiles\FolderProfile.pubxml'
Write-Host $publishFilePath
这是发布配置文件pubxml文件:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <PublishProvider>FileSystem</PublishProvider>
    <PublishUrl>F:\Fileshare\NCHIWebSite</PublishUrl>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <SiteUrlToLaunchAfterPublish />
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <ProjectGuid>f7da8cd0-d62c-47c5-9ae7-7c9cb9a6d23d</ProjectGuid>
    <SelfContained>false</SelfContained>
  </PropertyGroup>
</Project>

假的
假的
真的
释放
任何CPU
文件系统
F:\Fileshare\NCHIWebSite
文件系统
netcoreapp3.1
f7da8cd0-d62c-47c5-9ae7-7c9cb9a6d23d
假的
我希望看到输出的一些内容,无论是来自加载的XML内容还是来自XPATH select单节点,但是我什么也没有得到。我试过很多变体。有什么我做得不对吗?

您的输入XML使用了名称空间,当您使用XPath查询时,必须考虑到这一点-作为名称空间一部分的元素不能仅仅通过它们的元素名来定位(例如
Project
),即使它们只是通过祖先的
xmlns
属性隐式地成为名称空间的一部分

但是,使用PowerShell方便的、基于属性的XML DOM改编通常更简单,它允许您使用简单的点表示法深入到感兴趣的元素,并且忽略名称空间:

$publishProfileXM.Project.PropertyGroup.PublishUrl
有关其他信息,请参阅,包括如何将cmdlet与XPath查询和名称空间交替使用。

您的输入XML使用名称空间,当您与XPath查询一起使用时,必须考虑到这一点-作为名称空间一部分的元素不能仅通过其元素名称(例如
Project
)来定位,即使它们只是通过祖先的
xmlns
属性隐式地成为名称空间的一部分

但是,使用PowerShell方便的、基于属性的XML DOM改编通常更简单,它允许您使用简单的点表示法深入到感兴趣的元素,并且忽略名称空间:

$publishProfileXM.Project.PropertyGroup.PublishUrl

有关更多信息,请参阅,包括如何在XPath查询和名称空间中交替使用cmdlet。

您是如何执行脚本的?我是从项目解决方案路径中的powershell会话运行脚本的?您是如何执行脚本的?我是从项目解决方案路径中的powershell会话运行脚本的谢谢-我一直认为只要没有元素前缀,名称空间就不适用,但显然它们只是一个存在的问题。当xml很小且已知时,ignore命名空间方法是一个救命稻草。我很感激@Iofacture:很高兴听到答案很有帮助;我的荣幸。非常感谢-我一直认为名称空间在某种程度上不适用,只要没有元素前缀,但显然它们只是一个存在的问题。当xml很小且已知时,ignore命名空间方法是一个救命稻草。我很感激@Iofacture:很高兴听到答案很有帮助;我的荣幸。