I won't claim this is efficient, or well-written, or whatever, but it WorksForMe and I figured I'd share. Feel free to post better versions in the comments or on your own blog and add a link as a comment :)
Option Strict Off Option Explicit Off Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports System.Diagnostics Public Module RemoveAndSortModule Sub RemoveAndSortAll() IterateFiles() End Sub Private Sub IterateFiles() Dim project As Project Dim projectObjects As Object() Dim window As Window Dim target As Object window = DTE.Windows.Item(Constants.vsWindowKindCommandWindow) projectObjects = DTE.ActiveSolutionProjects If projectObjects.Length = 0 Then Exit Sub End If project = DTE.ActiveSolutionProjects(0) RemoveAndSortFiles(project.ProjectItems()) End Sub Private Sub RemoveAndSortFiles(ByVal items) Dim file As ProjectItem For Each file In items DTE.ExecuteCommand("View.SolutionExplorer") If file.Name.EndsWith(".cs") Then file.Open() file.Document.Activate() DTE.ExecuteCommand("View.ViewCode") DTE.ExecuteCommand("Edit.RemoveAndSort") file.Document.Save() file.Document.Close() End If If file.ProjectItems().Count > 0 Then RemoveAndSortFiles(file.ProjectItems()) End If Next End Sub End Module