我有以下ps1文件。此文件中有三个问题。
Q1。如何在XML中使用单引号和双引号?我用Google搜索,发现我需要添加一个额外的单引号。我尝试但没有奏效。
Q2。当我将新的PropertyGroup作为子节点添加到Project节点时,出现“错误类型”错误。我该如何解决呢?
Q3。我可以将多个PropertyGroup附加到项目节点吗?
$dir = "C:\Work\scripttest\output\"
$ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }
$configs = [xml]"<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Dev-1|AnyCPU'">
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
";
Get-ChildItem $dir *.csproj -recurse |
% {
$content = [xml](gc $_.FullName);
$project = $content.Project;
$project
$project.AppendChild($configs);
# $content.Save($_.FullName);
}
提前致谢!
答案 0 :(得分:1)
Q1:powershell中的转义字符是`而不是引用。请记住,您还应该转义$ symbol
问题2:您遇到问题,因为$project.AppendChild();
为XmlNode
且您的$configs
为XmlDocument
问题3:您可以,但不确定MsBuild是否会对此感到满意
这是脚本本身:
$dir = "C:\Work\scripttest\output\"
$ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }
$configs = [xml] "<PropertyGroup Condition=`"'`$(Configuration)|`$(Platform)' == 'Dev-1|AnyCPU'`">
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>"
Get-ChildItem $dir *.csproj -recurse |
% {
$content = [xml](gc $_.FullName);
$importNode = $content.ImportNode($configs.DocumentElement, $true)
$project = $content.Project;
$project
$project.AppendChild($importNode);
# $content.Save($_.FullName);
}
正如您所看到的,我必须使用ImportNode fisrt,因为它来自另一个文档