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

Jay*_*uzi 28 c# formatting visual-studio-2012

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

VS2012放弃了宏支持,因此不再起作用.

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

Jay*_*uzi 28

打开Tools- > Library Package Manager- > Package Manager Console,然后运行以下命令.最后,所有文档都将在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) }
Run Code Online (Sandbox Code Playgroud)

  • 这是一个小的合并请求,用于在格式化代码时排除自动生成的文件("*.Designer.cs"):https://gist.github.com/ubikuity/62335a46d4439b94a034 (2认同)

Dar*_*ryl 11

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

它会打开每个文件,对其进行格式化,然后保存并关闭文件,而不是将其保持打开状态.它也会跳过".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)
}
;
Run Code Online (Sandbox Code Playgroud)