2011-05-17 11 views
7

Necesito ayuda para editar un archivo csproj usando PowerShell. Básicamente necesito seleccionar un nodo y modificarlo.Cómo editar archivos .csproj con PowerShell - Visual Studio 2010

Ejemplo:

<None Include="T4\WebConfigSettingGeneratorScript.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
    <LastGenOutput>WebConfigSettingGeneratorScript1.txt</LastGenOutput> 
</None> 

I necesidad de quitar el atributo TextTemplatingFileGenerator de esta etiqueta.

Respuesta

10

Hago este tipo de cosas mucho. Mantengo un conjunto de funciones de ayuda para manipular archivos XML, archivos de proyecto C# particulares. Pruébelo:

 
param($path) 
$MsbNS = @{msb = 'http://schemas.microsoft.com/developer/msbuild/2003'} 

function RemoveElement([xml]$Project, [string]$XPath, [switch]$SingleNode) 
{ 
    $nodes = @(Select-Xml $XPath $Project -Namespace $MsbNS | Foreach {$_.Node}) 
    if (!$nodes) { Write-Verbose "RemoveElement: XPath $XPath not found" } 
    if ($singleNode -and ($nodes.Count -gt 1)) { 
     throw "XPath $XPath found multiple nodes" 
    } 
    foreach ($node in $nodes) 

     $parentNode = $node.ParentNode 
     [void]$parentNode.RemoveChild($node) 
    } 
} 

$proj = [xml](Get-Content $path) 
RemoveElement $proj '//msb:None/msb:Generator' -SingleNode 
$proj.Save($path) 
+0

Muchas gracias. ¿De dónde corro esto? ¿Conoces alguna forma de seleccionar el proyecto actual o el proyecto de inicio? –

+0

Pondré esto en un archivo RemoveTTFileGeneratorNode.ps1 (archivo de script de PowerShell) y luego lo ejecutaré desde el indicador de powershell pasando la ruta al archivo de proyecto de C#. –

+0

Lamentamos tener que preguntar, pero ¿cuál es la sintaxis para ejecutarlo desde el símbolo del sistema ps? - Sinceramente powershell n00b –

Cuestiones relacionadas