一次格式化Visual Studio项目中的所有文件

我有兴趣一次全部格式化Visual Studio(ver。2005)项目中的所有文件。

目前,有一种方法可以通过编辑 – >高级 – >格式化文档来格式化单个文档 。 但是,我没有看到一个命令一次全部格式化项目的所有文件。

任何想法如何做到这一点?

Tim Abell写了一个macros在他的博客上做这个:

这里是一个方便的macros观脚本今天我敲的视觉工作室。 它在列出的文件types的每个文件上运行“编辑,格式化文件”。

你必须留意它,因为它是互动的,有时会popup消息并等待答案。

您可以在http://github.com/timabell/vs-formatter-macro获取vb文件更多信息,; 请访问http://wiki.github.com/timabell/vs-formatter-macro

原始代码可在博客文章中find。 请注意,这比上面的github上提供的版本要旧。

请注意,从Visual Studio 2015开始,以下解决scheme本身不起作用。您还需要应用Marcus Mangelsdorf的答案。 然后,此脚本在Visual Studio 2015和2017中工作。


菲尔·哈克(Phil Haack)列出了一个很好的程序 – 添加一个可重复使用的脚本来缩进该项目 。

打开您的NuGetconfiguration文件的版本

  1. 打开包pipe理器;
  2. input$profile查看NuGetconfiguration文件的位置;
  3. 键入mkdir –force (split-path $profile)以创buildconfiguration文件的文件夹(如果它不存在)
  4. notepad $profile命令编辑configurationnotepad $profile

将可重用的方法添加到NuGetconfiguration文件

Phil使用了davidfowl的Format-Document方法,他在https://gist.github.com/davidfowl/984358find了:;

 # 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 } } 

重新打开Visual Studio以使用该命令

当您重新打开Visual Studio时,该命令可用。

只需从NuGet程序包pipe理器控制台运行即可: Format-Document这将重新格式化所选项目的所有文件。
要应用于整个解决scheme,请使用命令Get-Project -All | Format-Document Get-Project -All | Format-Document ,其中列出了项目,然后为每个项目调用重新格式化命令。

正如作者所说:

有了这个,您现在可以放纵您的OCD并运行Format-Document命令来清理整个解决scheme。 我只是用<Project>来运行它,现在可以成为我一直想成为的纳粹的空白。

10/10,将再次运行。

“ 格式化所有文件”扩展名适用于我。 无事可做,只需安装并点击即可!

Visual Studio 2015需要额外的步骤

菲尔·哈克的ANeves发布的解决scheme是完美的,但由于某种原因, $item.FileCodeModel.Language总是返回null在Visual Studio 2015 $item.FileCodeModel.Language Format-Document跳过所有文件,实际上什么都不做。

为了( hackily )解决这个限制,你可以replaceGet-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 } } } 

与以下使用该文件的扩展名而不是语言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 # (eg XML files in your project etc.), replace the following line with # "default { $null }" (thanks to HHenn for this suggestion!) default { $ext } } } 

我知道没有命令会为你的项目中的所有文件执行此操作,但是当在Visual Studio中打开代码文件时,可以使用编辑 – >高级 – >格式化文档命令(或者按CTRL + K通过键盘上的CTRL + D)。 这将修复当前代码文件中的格式。

为整个项目创build一个macros可能不会太复杂。