2013-03-17 10 views
28

Với các phiên bản trước của Visual Studio, tôi đã sử dụng Kevin Pilch-Bisson's script để định dạng tất cả các tệp C# trong giải pháp của mình.Làm thế nào để định dạng tất cả các tệp trong Visual Studio 2012?

VS2012 đã giảm hỗ trợ macro nên không hoạt động nữa.

Tôi có thể dễ dàng định dạng tất cả tài liệu của mình trong VS2012 bằng cách nào?

+4

Tôi đã đăng câu hỏi này để ghi lại giải pháp mà tôi đã tìm thấy. Nhưng có lẽ có những ý tưởng hay khác không? –

+0

bạn có thể đánh dấu câu trả lời của mình là chính xác không? –

Trả lời

27

mở cụ -> Thư viện Package Manager -> Package Manager Console, và chạy lệnh dưới đây. Cuối cùng, tất cả các tài liệu sẽ được mở trong IDE. (Máy có RAM thấp sẽ gặp sự cố với các giải pháp lớn.) Các tệp đã thay đổi sẽ là được sửa đổi trong IDE và không được lưu vào đĩa. Bạn có thể Lưu tất cả, sau đó đóng tất cả nếu bạn đã sẵn sàng.

VS2012 đã xóa ngôn ngữ macro giống như VB đã tồn tại trong phiên bản trước của Visual Studio. Tuy nhiên, giao diện DTE tiềm ẩn vẫn còn đó, và bạn có thể đạt được nó thông qua PowerShell, trong Package Manager Console

Các GUID lạ truyền cho ProjectItem.OpenConstants.vsViewKindCode.

Thông thường tôi sẽ chia phần này thành nhiều dòng, nhưng Bảng điều khiển quản lý gói không hỗ trợ việc tiếp tục dòng.

Bạn có thể tìm thấy phiên bản mới nhất tại 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) } 
+0

Thật không may, điều này dường như không hoạt động khi dự án của bạn nằm trong thư mục giải pháp ... Tôi không đủ quen thuộc với Powershell để đề xuất một sự cải thiện đáng tiếc. Bạn có đề xuất nào không? – Anthony

+0

Bắt tuyệt vời! Có, nó sẽ cần lặp lại đệ quy nếu '$ _' có bất kỳ' ProjectItems' nào. Bạn có thể viết một hàm đệ quy, hoặc có thể sử dụng một đóng. Nếu không có ai khác đến trước, tôi sẽ xem xét nó sau. –

+0

@Anthony: Tôi đã cập nhật nó để recurse. Cho tôi biết bạn nghĩ gì. –

1

Bạn có thể sử dụng ReSharper's Code Cleanup. Có vẻ như điều này có thể hoạt động trên toàn bộ giải pháp cùng một lúc.

2

Bạn có thể sử dụng CodeMaid, một plugin miễn phí cho VS2012. Điều đó cho phép bạn làm sạch, sắp xếp lại mã của bạn. Tôi luôn sử dụng nó trước khi kiểm tra mã của tôi với StyleCop

+1

Trong khi CodeMaid có thể là một công cụ tuyệt vời, mặc định nó có nhiều hơn so với câu hỏi được yêu cầu, áp dụng nhiều dọn dẹp hơn so với định dạng mã dựng sẵn của Visual Studio. Điều này có thể hoặc có thể không được mong muốn. – explunit

10

Đây là bản cập nhật cho tập lệnh hiện có hoạt động trên các giải pháp rất lớn.

Nó sẽ mở mỗi tệp, định dạng tệp, sau đó lưu và đóng tệp thay vì để tệp mở. Nó cũng bỏ qua ".designer". các tệp, vì các tệp này thường sẽ bị bỏ lại một mình.

Điều này hoạt động trong Visual Studio 2012 và 2013. Bạn có thể sao chép và dán trực tiếp vào Bảng điều khiển Trình quản lý gói.

Hãy cẩn trọng: dán mã này vào giao diện điều khiển của bạn sẽ ngay lập tức mở và định dạng tất cả các file C# trong toàn bộ giải pháp của bạn, tiết kiệm mỗi tập tin được sửa đổi mà không hỏi. Có thể là một ý tưởng tốt để phân nhánh trước tiên ...

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) 
} 
; 
+0

Điều này dường như không hoạt động khi thư mục gốc của giải pháp của bạn bao gồm các thư mục giải pháp thay vì các dự án. –

+0

Ở dạng hiện tại, điều này không thể được sao chép và dán vào VS 2017, đưa ra lỗi. – bbodenmiller

-4

Goto -> Tools - >> Option - >> TextEditor - >> XAML - >> Định dạng - >> Khoảng cách - >> - >> Kiểm tra các Postion Mỗi thuộc tính trên dòng riêng biệt! Thats it

+1

Huh? Tôi nghĩ bạn đã hiểu lầm câu hỏi của tôi. –

0

Đây là một biến thể khác của hai câu trả lời trước đó mà người dùng có thể thấy hữu ích ... chắc chắn có thể được cải thiện và đơn giản hơn nữa. Điều này không chỉ định dạng các tệp .cs mà còn là .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) }