Today I decided to format all .xaml documents in a solution so that all attributes are placed on a separate line and also to line nested tags on correct positions.
Actually I already setup settings in Visual Studio Tools menu a long time ago, but some developers working on the same project forget to format documents before check in – the result is - to comfortably read the file in standard format I need to check out the file and re-format it.
I decided to format all files in a solution so at least some time I don’t need to do this
I have found very good answer on Stack Overflow:
auto format all files in solution in visual studio 2010
This works fine in Visual Studio 2008 too.
I had to modify a script a little to allow iterating over solution folders as well.
My mods allowed only 1 hierarchy level of solution folders to be supported – but this can be extended by recursive function call in first method resolving projects.
Here is the script:
Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports System.Diagnostics Public Module Module1 Sub IterateFiles() Dim solution As Solution = DTE.Solution For Each prj As Project In solution.Projects If (prj.ConfigurationManager IsNot Nothing) Then ' It's a project! If (prj.UniqueName = prj.Name) Then IterateProjectFiles(prj.ProjectItems) Else If (prj.ProjectItems IsNot Nothing) Then For Each projectItem In prj.ProjectItems If (projectItem.SubProject IsNot Nothing) Then IterateProjectFiles(projectItem.SubProject.ProjectItems) End If Next End If End If Next End Sub Private Sub IterateProjectFiles(ByVal prjItms As ProjectItems) For Each file As ProjectItem In prjItms If file.SubProject IsNot Nothing Then FormatFile(file) If file.ProjectItems IsNot Nothing Then IterateProjectFiles(file.ProjectItems) End If ElseIf file.ProjectItems IsNot Nothing AndAlso file.ProjectItems.Count > 0 Then FormatFile(file) If file.ProjectItems IsNot Nothing Then IterateProjectFiles(file.ProjectItems) End If Else FormatFile(file) End If Next End Sub Private Sub FormatFile(ByVal file As ProjectItem) 'Exit Sub DTE.ExecuteCommand("View.SolutionExplorer") If file.Name.EndsWith(".xaml") Then file.Open() file.Document.Activate() DTE.ExecuteCommand("Edit.FormatDocument", "") file.Document.Save() file.Document.Close() End If End Sub End Module
Happy Coding
Kirill