Visual Studio(ver。2005)プロジェクトのすべてのファイルを一度にフォーマットすることに興味があります。
現在、Edit-> Advanced-> Format Documentのようにして、単一のドキュメントをフォーマットする方法があります。ただし、プロジェクトのすべてのファイルを一度にフォーマットする単一のコマンドが表示されません。
それを行う方法はありますか?
Tim Abellがこれを行うためのマクロを書いた blog :
これが、今日一緒にノックしたビジュアルスタジオ用の便利なマクロスクリプトです。リストされたファイルタイプのすべてのドキュメントに対して「編集、フォーマットドキュメント」を実行します。
インタラクティブであり、メッセージをポップアップして回答を待つこともあるので、注意が必要です。
https://github.com/timabell/vs-formatter-macro でvbファイルを取得できます https://github.com/timabell/vs-formatter-マクロ/ウィキ
元のコードはブログ投稿で入手できます。これは上記のgithubで利用可能なバージョンより古いことに注意してください。
すべてのファイルをフォーマット 拡張子が私のために働いた。何もする必要はありません。インストールしてクリックするだけです!
Visual Studio 2015以降、次のソリューションはそれ自体では機能しないことに注意してください。MarcusMangelsdorfによる回答も適用する必要があります。次に、このスクリプトはVisual Studio 2015および2017で機能します。
Phil Haackは適切な手順の概要を説明しました 再利用可能なスクリプトを追加してプロジェクトをインデントする 。
$profile
_と入力します。mkdir –force (split-path $profile)
と入力して作成します。notepad $profile
_を使用してプロファイルを編集します。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を再度開くと、コマンドを使用できます。
NuGetパッケージマネージャーコンソールから実行するだけです:_Format-Document
_これにより、選択したプロジェクトのすべてのファイルが再フォーマットされます。
ソリューション全体に適用するには、_Get-Project -All | Format-Document
_コマンドを使用します。これはプロジェクトを一覧表示し、プロジェクトごとに再フォーマットコマンドを呼び出します。
著者が述べたように:
これで、OCDを堪能し、Format-Documentコマンドを実行してソリューション全体をクリーンアップできます。私は<Project>に対してそれを実行しました、そして今、私がずっとなりたかったナチの空白になることができます。
10/10、再び実行されます。
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 }
}
}