如何格式化Visual Studio 2012中的所有文件?

使用以前版本的Visual Studio,我使用Kevin Pilch-Bisson的脚本来格式化我的解决方案中的所有C#文件。

VS2012放弃了宏支持,因此不再适用。

如何在VS2012中轻松格式化所有文档?

打开工具 – > 库包管理器 – > 包管理器控制台 ,然后运行以下命令。 最后,所有文档都将在IDE中打开。 (低RAM机器将遇到大型解决方案的问题。)更改的文件将在IDE中修改,而不会保存到磁盘。 如果准备好,您可以全部保存,然后全部关闭。

VS2012删除了以前版本的Visual Studio中存在的类似VB的宏语言。 但是,底层DTE接口仍然存在,您可以通过PowerShell在Package Manager控制台中访问它

传递给ProjectItem.Open的奇怪GUID是Constants.vsViewKindCode

通常我会将其拆分为多行,但程序包管理器控制台不支持行继续。

您可以在https://gist.github.com/JayBazuzi/9e0de544cdfe0c7a4358找到最新版本

 function f($projectItems) { $projectItems | ? { $_.Name.EndsWith( ".cs" ) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } } $dte.Solution.Projects | % { f($_.ProjectItems) } 

这是对现有脚本的更新,适用于非常大的解决方案。

它会打开每个文件,对其进行格式化,然后保存并关闭文件,而不是将其保持打开状态。 它也会跳过“.designer”。 文件,因为这些文件通常应该保持不变。

这适用于Visual Studio 2012和2013.您可以将其直接复制并粘贴到程序包管理器控制台中。

警告:将此代码粘贴到控制台中将立即打开并格式化整个解决方案中的每个C#文件,无需询问即可保存每个已修改的文件。 首先分支可能是个好主意…

 function FormatItems($projectItems) { $projectItems | % { # Write-Host " Examining item: $($_.Name)"; if ($_.Name -and $_.Name.ToLower().EndsWith(".cs") ` -and (-not $_.Name.ToLower().Contains(".designer."))) { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}'); $win.Activate(); $dte.ExecuteCommand('Edit.FormatDocument'); if (!$_.Saved) { Write-Host " Saving modified file: $($_.Name)"; $dte.ExecuteCommand('File.SaveSelectedItems'); } $dte.ExecuteCommand('Window.CloseDocumentWindow'); } if ($_.ProjectItems -and ($_.ProjectItems.Count -gt 0)) { # Write-Host " Opening sub-items of $($_.Name)"; FormatItems($_.ProjectItems); } }; } $dte.Solution.Projects | % { Write-Host "-- Project: $($_.Name)"; FormatItems($_.ProjectItems) } ; 

您可以使用CodeMaid , VS2012的免费插件。 这允许您清理,重新组织您的代码。 在使用StyleCop检查代码之前,我总是使用它

您可以使用ReSharper的代码清理 。 看起来这可以立即解决整个解决方案。

这是前两个答案的另一个变体,用户可能会发现有用……绝对可以进一步改进和简化。 这不仅可以格式化.cs文件,还可以格式化.json.cshtml.js.css

 function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".cs" ) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } } $dte.Solution.Projects | % { f($_.ProjectItems) } function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".json" ) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } } $dte.Solution.Projects | % { f($_.ProjectItems) } function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".cshtml" ) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } } $dte.Solution.Projects | % { f($_.ProjectItems) } function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".js" ) -and (-not $_.Properties.Item("FullPath").Value.Contains("common")) -and (-not $_.Properties.Item("FullPath").Value.Contains("Content")) -and (-not $_.Properties.Item("FullPath").Value.Contains("Scripts")) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } } $dte.Solution.Projects | % { f($_.ProjectItems) } function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".css" ) -and (-not $_.Properties.Item("FullPath").Value.Contains("common")) -and (-not $_.Properties.Item("FullPath").Value.Contains("Content")) -and (-not $_.Properties.Item("FullPath").Value.Contains("Scripts")) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } } $dte.Solution.Projects | % { f($_.ProjectItems) } 

转到 – >工具 – >>选项 – >> TextEditor – >> XAML – >>格式化 – >>间距 – >>检查单独行上的每个属性的位置! 而已