XML命名空间和C# csproj

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中向csproj添加新的PropertyGroup

示例:

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

请添加您正在使用的代码以添加节点。 - Andy Arismendi
这是同一个问题:http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/39af0a88-fedd-46d5-baea-12f8b2cfdacd(而根本问题是:理解XML命名空间)。 - Richard
2个回答

10

它的功能很好,但它也将文档中的所有“NewLine”都删除了。为什么会从文档中删除“\n”? - Michael Sync
@MichaelSync 可能是因为我们将 XML 保存为字符串。请尝试使用上面的更新。 - Andrey Marchuk

8

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

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

$elem = $content.CreateElement("PropertyGroup", $content.DocumentElement.NamespaceURI);
$content.Project.AppendChild($elem);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接