2012-04-25 55 views
9

我正在使用powershell 2.0編輯大量的csproj文件。一個編輯的要求是增加不同條件的新的PropertyGroup(請查看下面的例子)Xml命名空間和C#csproj

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

的問題是,PowerShell中添加了空的xmlns對於我已將所有新的PropertyGroup標籤。

如:

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

請添加要使用添加節點的代碼。 – 2012-04-25 03:00:13

+0

@安迪謝謝.i添加了代碼ady。 – 2012-04-25 07:01:49

+0

這是同一個問題:http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/39af0a88-fedd-46d5-baea-12f8b2cfdacd(並且底層問題是:理解XML名稱空間)。 – Richard 2012-05-04 10:59:56

回答

10

看着這個線程:http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace,它似乎無法輕易做到,你可以,但是有一種變通方法去:

相反作者:

$content.Save($_.FullName); 

使用:

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

它很好用,但它也從doc中刪除了所有「NewLine」。爲什麼它會從doc中刪除「\ n」? – 2012-05-04 09:57:28

+0

@MichaelSync可能是因爲我們將XML保存爲字符串。嘗試使用以上更新 – 2012-05-04 10:23:59

+0

謝謝!有用! – 2012-05-08 06:20:15

5

csproj文件具有默認命名空間。因此,當創建元素時,您需要引用相同的名稱空間,否則您會發現將xml生成的xml設置爲空字符串。

這裏是link在那裏我找到了解決辦法

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