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 esbozó un buen procedimiento - adding a reusable script to indent the project.
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
.
Añadir el método reutilizable al perfil NuGet
Phil utiliza el método de davidfowl Format-Document
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 utilizar el comando
Al volver a abrir Visual Studio, el comando está disponible.
Simplemente ejecútelo desde NuGet Package Manager Console: Format-Document
Esto reformateará todos los archivos del proyecto seleccionado.
Para aplicar a toda la solución, use el comando Get-Project -All | Format-Document
, que enumera los proyectos y luego para cada uno de ellos llama al comando de reformateo.
Como el autor lo puso:
Con esto en su lugar, ahora puede satisfacer su TOC y ejecutar el comando Format-documento para limpiar toda la solución. Simplemente lo ejecuté contra <Project> y ahora puedo convertirme en el nazi de espacio en blanco que siempre he querido ser.
10/10, se ejecutará de nuevo.
[Resharper] (http://www.jetbrains.com/resharper/) proporciona la limpieza y el formateo del código y eso es solo una fracción de su funcionalidad ... – Skyler
Solo como referencia futura, tenga en cuenta que las macros se han eliminado de [VS 2011] (http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/d8410838-085b-4647-8c42-e31b669c9f11). – Tilak
Phil Haack dice: http://haacked.com/archive/2011/05/22/an-obsessive-compulsive-guide-to-source-code-formatting.aspx – MZaragoza