Xml命名空间和C#csproj

时间:2012-04-25 02:30:02

标签: xml powershell

我正在使用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);

2 个答案:

答案 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);