Formatação-de uma vez - todos os arquivos em um projeto de estúdio Visual
actualmente, existe uma forma de formatar um único documento, fazendo algo como editar - >avançado - >formato Documento . No entanto, não vejo um único comando para formatar todos os arquivos de um projeto de uma só vez.
Faz ideia de como fazer isso?4 answers
Aqui está um macro script prático para o visual studio que juntei hoje. Ele executa "editar, formatar o documento" em cada documento dos tipos de arquivos listados.Você tem que manter um olho nele como ele é interativo e às vezes aparecer uma mensagem e esperar por uma resposta.
Podes obter o ficheiro vb em http://github.com/timabell/vs-formatter-macro Mais informações em http://wiki.github.com/timabell/vs-formatter-macro
O código original está disponível no post do blog. Note que esta é mais antiga do que a versão disponível no github acima.
A extensão formatou todos os ficheiros funcionou para mim. Nada a fazer, basta instalar e clicar!
Phil Haack delineou um bom procedimento - adicionando uma escrita reutilizável para indentar o projecto .
Abra o seu perfil NuGet para a edição
- abra o Gestor de pacotes;
- Tipo
$profile
para ver a localização do seu NuGet perfil; - Tipo
mkdir –force (split-path $profile)
para criar a pasta do perfil se não existir; - edite o perfil com o comando
notepad $profile
.
Adicione o método reutilizável ao perfil de NuGet
O Phil usou o método de davidfowl que encontrou em 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 }
}
Reabra o Visual Studio para usar o comando
Quando reabrires o Visual Studio, o comando está disponível.Basta executá-lo a partir do pacote NuGet Consola do Gestor: Format-Document
Isto irá formatar todos os ficheiros do projecto seleccionado.
Para se aplicar a toda a solução, use o comando Get-Project -All | Format-Document
, que lista os projetos e, em seguida, para cada um deles chama o comando de reformatação.
Como disse o autor:
10/10, voltaria a correr.Com isto no lugar, pode agora satisfazer o seu TOC e executar o comando Format-Document para limpar toda a sua solução. E agora posso tornar-me no Nazi do espaço branco que sempre quis. ser.
Passo adicional necessário para o Visual Studio 2015
A solução de Phil Haack postada por ANeves é perfeita, mas por alguma razão $item.FileCodeModel.Language
sempre retorna null em Visual Studio 2015 fazendo o Format-Document
saltar todos os arquivos e efetivamente não fazer nada.
A ([15]}hackily ) contornar esta limitação pode substituir a função 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 }
}
}
Com a seguinte variante que usa a extensão do ficheiro em vez da linguagem GUID:
# 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 }
}
}