9

私はPowerShell2.0を使用して多くのcsprojファイルを編集しています。編集の要件の1つは、条件の異なる新しい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);
4

2 に答える 2

10

このスレッド: http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespaceを見ると、簡単には実行できないようですが、回避策があります。

それ以外の:

$content.Save($_.FullName);

使用する:

$content = [xml] $content.OuterXml.Replace(" xmlns=`"`"", "")
$content.Save($_.FullName);
于 2012-05-03T12:07:22.060 に答える
8

csproj ドキュメントにはデフォルトの名前空間があります。したがって、要素を作成するときは、同じ名前空間を参照する必要があります。そうしないと、xmlns が空の文字列に設定されて生成された xml が見つかります。

ここに私が解決策を見つけたリンクがあります

$elem = $content.CreateElement("PropertyGroup", $content.DocumentElement.NamespaceURI);
$content.Project.AppendChild($elem);
于 2012-11-09T17:44:16.090 に答える