Xml命名空间和C#csproj

Mic*_*ync 9 xml powershell

我正在使用powershell 2.0编辑大量的csproj文件.编辑的一个要求是添加具有不同条件的新PropertyGroup(请查看下面的示例)

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'My-New-Env|AnyCPU'">
Run Code Online (Sandbox Code Playgroud)

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

例如:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'My-New-Env|AnyCPU'" xmlns="">
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

    $project = $content.Project;

    $content.Project.RemoveAttribute("xmlns");
Run Code Online (Sandbox Code Playgroud)

编辑:我正在关注此帖添加新节点.

如何从powershell向csproj添加新的PropertyGroup

例:

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

And*_*huk 10

看看这个帖子:http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace,似乎无法轻松完成,但是你可以采用一种解决方法:

代替:

$content.Save($_.FullName);
Run Code Online (Sandbox Code Playgroud)

使用:

$content = [xml] $content.OuterXml.Replace(" xmlns=`"`"", "")
$content.Save($_.FullName);
Run Code Online (Sandbox Code Playgroud)


小智 8

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

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

$elem = $content.CreateElement("PropertyGroup", $content.DocumentElement.NamespaceURI);
$content.Project.AppendChild($elem);
Run Code Online (Sandbox Code Playgroud)