Powershell命令无法读取XML
我有一个powershell脚本,将用于增强“发布到文件夹”配置文件。我希望能够读取我的appsettings.json“versionNumber”属性,并将生成的文件四处移动,创建一个漂亮的zip文件。我意识到我可以用MSBUILD直接完成所有这些,但这是针对.net核心项目的,我担心不能正确完成。所以现在我使用的是PS脚本和发布配置文件 powershell脚本拒绝读取发布配置文件xml。以下是PS脚本: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
$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:很高兴听到答案很有帮助;我的荣幸。