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

问题描述 投票:0回答:7

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

目前,有一种方法可以通过执行诸如编辑->高级->格式化文档之类的操作来格式化单个文档。但是,我没有看到一个命令可以一次性格式化项目的所有文件。

知道该怎么做吗?

c# visual-studio visual-studio-2005 formatting
7个回答
37
投票

“格式化所有文件”扩展对我有用。无需执行任何操作,只需安装并点击即可!


29
投票

只需运行解决方案的代码清理即可! 您还可以创建多个干净的配置文件并定义每个配置文件中发生哪些操作。

Tim Abell 在他的

博客

27
投票

这是我今天拼凑出来的一个方便的 Visual Studio 宏脚本。 它对列出的文件类型的每个文档运行“编辑、格式化文档”。

您必须密切关注它,因为它是交互式的,有时会弹出一条消息并等待答复。

您可以在

https://github.com/timabell/vs-formatter-macro 获取 vb 文件

更多信息请访问

https://github.com/timabell/vs-formatter-macro/wiki

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

请注意,从 Visual Studio 2015 开始,以下解决方案本身无法正常工作。您还需要应用 Marcus Mangelsdorf 的答案。然后,该脚本可在 Visual Studio 2015 和 2017 中运行。


17
投票
Phil Haack 概述了一个很好的过程 -

添加可重用脚本来缩进项目


打开您的 NuGet 配置文件进行编辑

打开包管理器;

输入
    $profile
  1. 查看您的 NuGet 配置文件的位置;
  2. 输入
    mkdir –force (split-path $profile)
    创建配置文件的文件夹(如果不存在);
  3. 使用命令
    notepad $profile
    编辑配置文件。
  4. 将可重用方法添加到 NuGet 配置文件
  5. Phil 使用了 davidfowl 的
Format-Document

方法,他在

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 } } 重新打开 Visual Studio 以使用该命令

重新打开 Visual Studio 后,该命令可用。

只需从 NuGet 包管理器控制台运行它即可:

Format-Document

这将重新格式化所选项目的所有文件。

要应用于整个解决方案,请使用命令

Get-Project -All | Format-Document

,该命令列出项目,然后为每个项目调用重新格式化命令。

正如作者所说:

完成此操作后,您现在可以尽情享受强迫症并运行 Format-Document 命令来清理整个解决方案。我刚刚与

进行了对抗,现在可以成为我一直想成为的空白纳粹分子。

10/10,会再次运行。

Visual Studio 2015 需要额外的步骤


13
投票
ANeves

发布的 Phil Haack 解决方案非常完美,但由于某种原因

$item.FileCodeModel.Language

Visual Studio 2015 中始终返回 null,使得

Format-Document
跳过所有文件并实际上不执行任何操作。 要(
hackily
)解决此限制,您可以替换

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


以下变体使用文件扩展名而不是语言 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 }
   }            
}

有一种使用 
dotnet

12
投票

通过运行以下命令安装
dotnet格式

  1. dotnet tool install -g dotnet-format
    运行它,将
    ProjectFile.csproj
    替换为项目文件的路径,使用以下命令行:
  2. dotnet format ProjectFile.csproj
    
    
    
    
  3. 我现在也遇到同样的问题。对于从市场安装的 Visual Studio 2022 17.10.2,插件 FormatAllFilesPlus 适用于我。右键单击解决方案或项目,然后在菜单中选择“格式化所有文件”。

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.