【问题标题】:Xml namespace and C# csprojXml 命名空间和 C# csproj
【发布时间】:2012-05-05 17:17:38
【问题描述】:

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

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

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

【问题讨论】:

标签: xml powershell


【解决方案1】:

看这个帖子:http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace,好像不是很容易做到的,你可以,但是有一个解决方法:

代替:

$content.Save($_.FullName);

用途:

$content = [xml] $content.OuterXml.Replace(" xmlns=`"`"", "")
$content.Save($_.FullName);

【讨论】:

  • 效果很好,但它也从文档中删除了所有“NewLine”。为什么要从文档中删除“\n”?
  • @MichaelSync 可能是因为我们将 XML 保存为字符串。试试上面的更新
【解决方案2】:

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

这是我找到解决方案的link

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 2012-03-23
    • 2011-12-26
    • 2020-04-27
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多