2012-04-25 33 views
9

Tôi đang sử dụng PowerShell 2.0 để chỉnh sửa nhiều tệp csproj. Một trong những yêu cầu để chỉnh sửa là thêm PropertyGroup mới với điều kiện khác nhau (Vui lòng kiểm tra ví dụ dưới đây)Không gian tên Xml và C# csproj

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

Vấn đề là PowerShell thêm xmlns trống cho tất cả các thẻ PropertyGroup mới mà tôi đã thêm.

Ví dụ:

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

Có cách nào để thêm nút xml mới mà không có bất kỳ không gian tên?

Tôi đã thử xóa thuộc tính không gian tên bằng cách sử dụng mã bên dưới trước khi thêm Nhóm sản phẩm mới nhưng không hoạt động. (Nghĩa là thuộc tính không thực sự loại bỏ và tôi vẫn có thể nhìn thấy không gian tên rỗng sau khi thêm nút mới.)

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

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

    $project = $content.Project; 

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

Edit: tôi sau bài này để thêm nút mới.

How to add new PropertyGroup to csproj from powershell

Ví dụ:

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

Vui lòng thêm mã bạn đang sử dụng để thêm các nút. –

+0

@Andy thanks .i đã thêm mã ady. –

+0

Đây là cùng một câu hỏi: http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/39af0a88-fedd-46d5-baea-12f8b2cfdacd (và vấn đề cơ bản là: hiểu các không gian tên XML). – Richard

Trả lời

10

Nhìn vào chủ đề này: http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace, có vẻ như nó không thể dễ dàng thực hiện, bạn có thể, tuy nhiên đi với một workaround:

Thay vào đó của:

$content.Save($_.FullName); 

Sử dụng:

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

nó hoạt động tốt nhưng nó cũng loại bỏ tất cả "NewLine" từ doc là tốt. Tại sao nó xóa "\ n" khỏi tài liệu? –

+0

@MichaelSync có thể là do chúng tôi đang lưu XML dưới dạng chuỗi. Hãy thử cập nhật từ trên –

+0

Cảm ơn! Nó hoạt động! –

5

Tài liệu csproj có không gian tên mặc định. Do đó khi tạo phần tử bạn cần tham chiếu đến cùng một không gian tên, nếu không bạn sẽ tìm thấy xml được tạo bằng xmlns được đặt thành chuỗi rỗng.

Đây là link nơi tôi tìm thấy giải pháp

$elem = $content.CreateElement("PropertyGroup", $content.DocumentElement.NamespaceURI); 
$content.Project.AppendChild($elem); 
Các vấn đề liên quan