一次格式化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文件的版本
- 打开包pipe理器;
- input
$profile
查看NuGetconfiguration文件的位置; - 键入
mkdir –force (split-path $profile)
以创buildconfiguration文件的文件夹(如果它不存在) - 用
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可能不会太复杂。