9

I'm using powershell 2.0 to edit a lot of csproj files. One of the requirements for editing is to add new PropertyGroup with different condition (Please check the example below)

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

The problem is that powershell added the empty xmlns for all new PropertyGroup tags that I have added.

Eg:

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

Is there any way to add new xml node without having any namespace?

I tried removing the namespace attribute by using the code below before adding new PropertyGroup but it didn't work. (meaning that attribute is not actually removed and I can still see the empty namespace after adding new node.)

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

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

    $project = $content.Project;

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

Edit: I'm following this post for adding new node.

How to add new PropertyGroup to csproj from powershell

Example:

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

2 Answers 2

10

Looking at this thread: http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace, it seems that it can't be easily done, you can, however go with a workaround:

Instead of:

$content.Save($_.FullName);

Use:

$content = [xml] $content.OuterXml.Replace(" xmlns=`"`"", "")
$content.Save($_.FullName);
Sign up to request clarification or add additional context in comments.

2 Comments

it works great but it also removed all "NewLine" from doc as well. Why does it remove "\n" from doc?
@MichaelSync it might be because we are saving XML as string. Try with updates from above
8

csproj document has default namespace. Hence when creating the element you need to refer to the same namespace otherwise you will find the xml generated with xmlns set to empty string.

Here is the link where I found the solution

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.