8

Powershell初学者在这里..

所以我创建了一个带有 powershell 脚本的 Nuget 包。powershell 脚本在安装时会修改我的 Visual Studio 项目中的 xml 架构。问题是......

如果 xml 文件中有一个多行块注释,例如

<!--<foo>
   <bar>
   </bar>
</foo>-->

脚本运行后,Visual Studio 会弹出一条消息,说我的文件有“行尾不一致......”

如果没有注释,或者有单行注释,例如

<!--foo-->

没有问题。不知何故,以块注释结尾的行通过 powershell 函数从 CRLF 更改为其他内容。

这是我用于加载和保存 xml 文件的 powershell 脚本

 [xml]$xml = gc $xmlFileLocation -encoding utf8

 $xml.Save($xmlFileLocation)

我也尝试过类似的东西

 set-content -encoding utf8 $xmlFileLocation $xml.outerXml

但我不断收到这条消息......

任何建议/帮助将不胜感激。

4

2 回答 2

7

管道Get-Content通过Out-String

[xml] $xml = Get-Content 'foo.xml' | Out-String
$xml.foo.bar = 'baz'
$xml.Save('foo.xml')

我刚刚对此进行了测试:没有Out-String,我在 Visual Studio 中看到了消息。使用Out-String,我没有,并且评论被单独留下。

于 2012-11-20T19:49:25.747 回答
0

使用Select-Xmlcmdlet 而不是Get-Content

使用: $xml = ( Select-Xml -Path foo.xml -XPath / ).Node

参考:https ://blog.stangroome.com/2014/02/10/powershell-select-xml-versus-get-content/

于 2019-02-07T16:48:37.557 回答