我正在使用powershell 2.0来编辑大量的csproj文件。编辑的一个要求是添加具有不同条件的新PropertyGroup(请查看下面的示例)
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'My-New-Env|AnyCPU'">
问题是powershell为我添加的所有新PropertyGroup标记添加了空xml。
例如:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'My-New-Env|AnyCPU'" xmlns="">
有没有办法在没有任何命名空间的情况下添加新的xml节点?
我尝试在添加新PropertyGroup之前使用下面的代码删除namespace属性,但它不起作用。 (意味着该属性实际上并未删除,并且在添加新节点后我仍然可以看到空命名空间。)
$content = [xml](gc $_.FullName);
Write-Host "Reading "$_.FullName -foregroundcolor yellow;
$project = $content.Project;
$content.Project.RemoveAttribute("xmlns");
编辑:我正在关注这篇文章以添加新节点。
How to add new PropertyGroup to csproj from powershell
示例:
$content = [xml](gc $_.FullName);
$importNode = $content.ImportNode($configs.DocumentElement, $true)
$project = $content.Project;
$project
$project.AppendChild($importNode);
# $content.Save($_.FullName);
答案 0 :(得分:10)
看看这个帖子:http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace,似乎不能轻易完成,但是你可以采用一种解决方法:
而不是:
$content.Save($_.FullName);
使用:
$content = [xml] $content.OuterXml.Replace(" xmlns=`"`"", "")
$content.Save($_.FullName);
答案 1 :(得分:7)
csproj文档具有默认命名空间。因此,在创建元素时,您需要引用相同的命名空间,否则您会发现xmlns生成的xml设置为空字符串。
以下是我找到解决方案的link
$elem = $content.CreateElement("PropertyGroup", $content.DocumentElement.NamespaceURI);
$content.Project.AppendChild($elem);