9

我正在使用 powershell 2.0 来编辑很多 csproj 文件。编辑的要求之一是添加具有不同条件的新 PropertyGroup(请查看下面的示例)

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'My-New-Env|AnyCPU'">

问题是 powershell 为我添加的所有新 PropertyGroup 标签添加了空的 xmlns。

例如:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'My-New-Env|AnyCPU'" xmlns="">

有没有办法在没有任何命名空间的情况下添加新的 xml 节点?

在添加新的 PropertyGroup 之前,我尝试使用下面的代码删除命名空间属性,但它不起作用。(这意味着该属性实际上并未被删除,并且在添加新节点后我仍然可以看到空的命名空间。)

$content = [xml](gc $_.FullName);     

    Write-Host "Reading "$_.FullName -foregroundcolor yellow;

    $project = $content.Project;

    $content.Project.RemoveAttribute("xmlns");

编辑:我正在关注这篇文章以添加新节点。

如何从 powershell 将新的 PropertyGroup 添加到 csproj

例子:

$content = [xml](gc $_.FullName); 
  $importNode = $content.ImportNode($configs.DocumentElement, $true) 
  $project = $content.Project;
  $project
  $project.AppendChild($importNode);
  # $content.Save($_.FullName);
4

2 回答 2

10

看这个线程:http ://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace ,似乎不容易做到,但是可以使用解决方法:

代替:

$content.Save($_.FullName);

采用:

$content = [xml] $content.OuterXml.Replace(" xmlns=`"`"", "")
$content.Save($_.FullName);
于 2012-05-03T12:07:22.060 回答
8

csproj 文档具有默认命名空间。因此,在创建元素时,您需要引用相同的命名空间,否则您会发现生成的 xmlns 设置为空字符串。

这是我找到解决方案的链接

$elem = $content.CreateElement("PropertyGroup", $content.DocumentElement.NamespaceURI);
$content.Project.AppendChild($elem);
于 2012-11-09T17:44:16.090 回答