在之前的Visual Studio版本中,我使用了Kevin Pilch-Bisson的脚本来格式化我的解决方案中的所有C#文件。
由于VS2012不再支持宏,因此该方法不再适用。
我该如何在VS2012中轻松格式化我的所有文档?
在之前的Visual Studio版本中,我使用了Kevin Pilch-Bisson的脚本来格式化我的解决方案中的所有C#文件。
由于VS2012不再支持宏,因此该方法不再适用。
我该如何在VS2012中轻松格式化我的所有文档?
打开工具->库包管理器->包管理器控制台,并运行以下命令。最后,所有文档将在IDE中打开。(低内存机器将在大型解决方案中遇到问题。)更改的文件将在IDE中修改,而不保存到磁盘。如果准备好了,可以全部保存,然后全部关闭。
VS2012删除了在以前版本的Visual Studio中存在的类似VB的宏语言。但是,底层的DTE接口仍然存在,并且您可以通过PowerShell,在包管理器控制台中访问它
传递给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) }
$_
有任何ProjectItems
,它将需要进行递归迭代。你可以编写一个递归函数,或者使用闭包。如果没有其他人先处理它,我稍后会看一下。 - Jay Bazuzi以下是现有脚本的更新版本,可用于处理非常大的解决方案。
它会打开每个文件,格式化它,然后保存并关闭该文件,而不是让它保持开启状态。它还会跳过 ".designer." 文件,因为这些文件通常应该被保留不变。
在最近的 Visual Studio 版本(2017年之后),请将脚本复制到 ps1 文件中,然后在“程序包管理器控制台”中运行 . C:\path\to\the.ps1
来调用它。
(在 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)
}
;
.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) }
前往 --> 工具 -->> 选项 -->> 文本编辑器 -->> XAML -->> 格式设置 -->> 空格 -->> 勾选每个属性单独一行!就这样