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
- Abra el Administrador de paquetes;
- Escriba
$profile
para ver la ubicación de su perfil NuGet; - Escriba
mkdir –force (split-path $profile)
para crear la carpeta del perfil si no existe; - 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.