visual studio recuperar ordenar objetos indentar formatear dinamicos como codigo code archivos c# visual-studio visual-studio-2005 formatting

c# - studio - ordenar codigo visual code



Formatear, de una vez, todos los archivos en un proyecto de Visual Studio (4)

Estoy interesado en formatear todos los archivos en un proyecto de Visual Studio (ver. 2005) a la vez.

Actualmente, hay una forma de formatear un solo documento haciendo algo como Editar-> Avanzado-> Formatear documento . Sin embargo, no veo un solo comando para formatear todos los archivos de un proyecto a la vez.

¿Alguna idea de cómo hacerlo?


Paso adicional necesario para Visual Studio 2015

La solución de Phil Haack publicada por ANeves es perfecta, pero por alguna razón $item.FileCodeModel.Language siempre devuelve null en Visual Studio 2015 haciendo que el Format-Document omita todos los archivos y no haga nada efectivamente.

Para ( hackfully ) trabajar alrededor de esta limitación puede reemplazar la función Get-Language :

# Convert language guid to friendly name function Get-Language($item) { if(!$item.FileCodeModel) { return $null } $kind = $item.FileCodeModel.Language switch($kind) { ''{B5E9BD34-6D3E-4B5D-925E-8A43B79820B4}'' { ''C#'' } ''{B5E9BD33-6D3E-4B5D-925E-8A43B79820B4}'' { ''VB'' } default { $kind } } }

con la siguiente variante que usa la extensión del archivo en lugar del GUID de idioma:

# Convert file extension to friendly language name function Get-Language($item) { if(!$item.FileCodeModel) { return $null } $filename = $item.Name $ext = $filename.substring($filename.lastindexof(''.''), ($filename.length - $filename.lastindexof(''.''))) switch($ext) { ''.cs'' { ''C#'' } ''.vb'' { ''VB'' } # If you want to prevent re-formatting files that are not VB or C# source files # (e.g. XML files in your project etc.), replace the following line with # "default { $null }" (thanks to HHenn for this suggestion!) default { $ext } } }


La extensión Format All Files funcionó para mí. ¡Nada que hacer, solo instale y haga clic!


Tenga en cuenta que la solución siguiente no funciona por sí solo a partir de Visual Studio 2015. También debe aplicar la respuesta de Marcus Mangelsdorf. Entonces, este script funciona en Visual Studio 2015 y 2017.

Phil Haack describió un buen procedimiento: agregar un guión reutilizable para sangrar el proyecto .

Abra su perfil NuGet para la edición

  1. Abra el Administrador de paquetes;
  2. Escriba $profile para ver la ubicación de su perfil NuGet;
  3. Escriba mkdir –force (split-path $profile) para crear la carpeta del perfil si no existe;
  4. Edite el perfil con el comando notepad $profile .

Agregue el método reutilizable al perfil NuGet

Phil utilizó el método Format-Document davidfowl que encontró en https://gist.github.com/davidfowl/984358 :

# Function to format all documents based on https://gist.github.com/984353 function Format-Document { param( [parameter(ValueFromPipelineByPropertyName = $true)] [string[]]$ProjectName ) Process { $ProjectName | %{ Recurse-Project -ProjectName $_ -Action { param($item) if($item.Type -eq ''Folder'' -or !$item.Language) { return } $window = $item.ProjectItem.Open(''{7651A701-06E5-11D1-8EBD-00A0C90F26EA}'') if ($window) { Write-Host "Processing `"$($item.ProjectItem.Name)`"" [System.Threading.Thread]::Sleep(100) $window.Activate() $Item.ProjectItem.Document.DTE.ExecuteCommand(''Edit.FormatDocument'') $Item.ProjectItem.Document.DTE.ExecuteCommand(''Edit.RemoveAndSort'') $window.Close(1) } } } } } function Recurse-Project { param( [parameter(ValueFromPipelineByPropertyName = $true)] [string[]]$ProjectName, [parameter(Mandatory = $true)]$Action ) Process { # Convert project item guid into friendly name function Get-Type($kind) { switch($kind) { ''{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}'' { ''File'' } ''{6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}'' { ''Folder'' } default { $kind } } } # Convert language guid to friendly name function Get-Language($item) { if(!$item.FileCodeModel) { return $null } $kind = $item.FileCodeModel.Language switch($kind) { ''{B5E9BD34-6D3E-4B5D-925E-8A43B79820B4}'' { ''C#'' } ''{B5E9BD33-6D3E-4B5D-925E-8A43B79820B4}'' { ''VB'' } default { $kind } } } # Walk over all project items running the action on each function Recurse-ProjectItems($projectItems, $action) { $projectItems | %{ $obj = New-Object PSObject -Property @{ ProjectItem = $_ Type = Get-Type $_.Kind Language = Get-Language $_ } & $action $obj if($_.ProjectItems) { Recurse-ProjectItems $_.ProjectItems $action } } } if($ProjectName) { $p = Get-Project $ProjectName } else { $p = Get-Project } $p | %{ Recurse-ProjectItems $_.ProjectItems $Action } } } # Statement completion for project names Register-TabExpansion ''Recurse-Project'' @{ ProjectName = { Get-Project -All | Select -ExpandProperty Name } }

Vuelva a abrir Visual Studio para usar el comando

Cuando vuelve a abrir Visual Studio, el comando está disponible.

Simplemente ejecútelo desde NuGet Package Manager Console: Format-Document Esto formateará todos los archivos del proyecto seleccionado.
Para aplicar a toda la solución, use el comando Get-Project -All | Format-Document Get-Project -All | Format-Document , que enumera los proyectos y luego para cada uno de ellos llama al comando de reformateo.

Como dijo el autor:

Con esto en su lugar, ahora puede complacer su OCD y ejecutar el comando Format-Document para limpiar toda su solución. Simplemente lo ejecuté contra <Project> y ahora puedo convertirme en el nazi de espacio en blanco que siempre quise ser.

10/10, correría de nuevo.


Tim Abell escribió una macro para hacer esto en su timwise.blogspot.com/2009/01/… :

Aquí hay un guión de macro útil para el estudio visual que llamé juntos hoy. Ejecuta "editar, formatear documento" en cada documento de los tipos de archivo enumerados.

Tienes que vigilarlo ya que es interactivo y algunas veces muestra un mensaje y espera una respuesta.

Puede obtener el archivo vb en http://github.com/timabell/vs-formatter-macro Más información en http://wiki.github.com/timabell/vs-formatter-macro

El código original está disponible en la publicación del blog. Tenga en cuenta que esto es anterior a la versión disponible en github anterior.