一次删除整个项目或解决方案中未使用的命名空间

Posted

技术标签:

【中文标题】一次删除整个项目或解决方案中未使用的命名空间【英文标题】:Remove unused namespaces across a whole project or solution at once 【发布时间】:2010-09-21 23:01:50 【问题描述】:

我知道你可以逐个文件地做。

有没有办法一步完成一个项目中的所有文件?

【问题讨论】:

几年过去了,你能考虑更新一下接受的答案吗? 【参考方案1】:

分析菜单下有一个内置功能,称为代码清理。 如果您单击 Profile 1,它将起到删除和排序功能的作用。

【讨论】:

【参考方案2】:

VS 2017 或 2019 中不需要任何插件。单击任何 using 语句附近的灯泡图标,然后单击 Fix all occurrences in 部分旁边的 Solution

【讨论】:

这对我有用,因为我希望在整个解决方案中删除特定的 using 语句。 这是一个更好的解决方案,它接受的答案是 IDE 的本机。确认在 VS 2019 中工作 天哪,我真是瞎了眼。一直在使用灯泡,现在才注意到这些操作可以应用于整个项目/解决方案。 后来的版本没有以前的灯泡了,但是右键单击using 语句,然后(灯泡)“快速操作和重构...”将为您提供选项删除整个解决方案中的使用。 @NikolaNovak 你确定吗?我只是像往常一样在最新(且干净)的 VS2019 上使用灯泡。也许扩展程序在您的安装中改变了这一点?【参考方案3】:

其他关于 Productivity Power Tools 扩展的答案没有详细说明如何实际执行此操作,因此以下是 Visual Studio 2013、2015、2017 和 2019 的一些说明:

首先,在 Visual Studio 中打开 Tools > Extensions and Updates... 对话框,在左侧栏中选择 Online,然后在 Visual Studio Gallery 中搜索“生产力电动工具”。安装扩展并重启 VS。

或者,您可以手动下载并安装适用于您的 Visual Studio 版本的扩展:

Productivity Power Tools 2013Productivity Power Tools 2015Productivity Power Tools 2017/2019

对于 VS2017 和 VS2019,您还可以在 Power Tools 包中单独下载 Power Commands 扩展:

Power Commands for Visual Studio

请注意,在撰写本文时,VS2017 版本不适用于 .Net Core 项目/解决方案。

安装扩展程序后,只需在解决方案资源管理器中右键单击解决方案,然后选择 Power Commands > Remove and Sort Usings

这可能需要一段时间,尤其是在大型解决方案上;它也不会使修改后的文件保持打开状态(因此无法撤消),因此确保在您选择的 VCS 中提交所有内容在运行之前,这样您就可以恢复如果出现问题,它会做出改变!

更新:格式化所有文件

最近我一直在使用 Format All Files 扩展程序,它允许您执行 Format DocumentRemove and Sort Usings 以及您选择的其他自定义命令(全部可选,在 VS 首选项中设置)。

它似乎工作得很好,但同样,无法撤消,所以确保在您选择的 VCS 中提交所有内容在运行之前

【讨论】:

加一个用于添加当前版本和以前版本的链接。提供步骤,尽管它们很简单。 加一个提醒我先提交。你可能刚刚救了我的培根!【参考方案4】:

visual studio 2017 具有内置功能,可从整个项目中删除不必要的名称空间。

【讨论】:

【参考方案5】:

对于更新的版本(包括 2017 年),请尝试使用 "Format All Files" 扩展名。它对我来说非常有效。

【讨论】:

【参考方案6】:

我正在使用 Visual Studio 2015 并找到了一个名为 BatchFormat 的工具: https://marketplace.visualstudio.com/items?itemName=vs-publisher-147549.BatchFormat

这完美地完成了这项工作。

安装该工具,然后在解决方案资源管理器中右键单击您的解决方案,然后在菜单顶部您会看到批处理格式:

无论您选择什么,都将应用于解决方案中的每个文件,正如您在屏幕截图中看到的那样,还有其他选项,您还可以格式化每个文档。

【讨论】:

【参考方案7】:

生产力 电动工具正是您所需要的。 https://visualstudiogallery.msdn.microsoft.com/dbcb8670-889e-4a54-a226-a48a15e4cace

安装后,您可以从“工具 –> 选项 –> Productivity Power Tools –> PowerCommands –> Generals”中找到“Remove and Sort Usings on Save”。检查该选项后,重新启动 VS。现在保存,你会看到神奇之处。

对于 VS 2015,请查看this

【讨论】:

【参考方案8】:

这是对上述 VB.NET 脚本的一个小改进。确保您已安装 Productivity Power Tools。

    Private Sub RemoveAndSortSome(ByVal projectItem As ProjectItem)
    On Error Resume Next
    If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
        If projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 Then
            Dim window As Window = projectItem.Open(Constants.vsViewKindCode)

            window.Activate()

            projectItem.Document.DTE.ExecuteCommand("Edit.RemoveAndSort")

            window.Close(vsSaveChanges.vsSaveChangesYes)

        ElseIf projectItem.Name.LastIndexOf(".vb") = projectItem.Name.Length - 3 Then
            Dim window As Window = projectItem.Open(Constants.vsViewKindCode)

            window.Activate()

            projectItem.Document.DTE.ExecuteCommand("EditorContextMenus.CodeWindow.OrganizeImports.RemoveandSortImports")

            window.Close(vsSaveChanges.vsSaveChangesYes)
        End If
    End I

【讨论】:

感谢您提供电动工具的链接...我不知道它们在 2010 年就已经存在了,自从 2008 年升级以来我一直有点想念它们。【参考方案9】:

对于 Visual Studio 2010,您可以从 Visual Studio 库下载“删除和排序使用”扩展。

http://visualstudiogallery.msdn.microsoft.com/en-us/cb559aa8-d976-4cc2-9754-5a712f985d16

适合我

【讨论】:

它也适用于 VS2013。尽管如此,至少在 VS2013 中,它会在保存文档时激活,然后,它不是一种对项目中的所有文件一次性执行此操作的方法 确保您的源代码树在运行时展开。要运行此右键单击特定项目/解决方案,然后从解决方案资源管理器中选择“删除和排序未使用的扩展”选项。在此之后,每个文件仅在被清理之前打开,然后自动关闭。 我相信链接现在是marketplace.visualstudio.com/…【参考方案10】:

你的意思是使用语句吗?首先,请注意,它们通常不会伤害其他占用空间的东西。 ReSharper 之类的工具提供了自动执行此操作的技巧,但是:不久前有一个 link in the VS feed;归结为:

转到工具 -> 宏 -> 宏 IDE... 在 Project Explorer 中,添加 -> 添加模块...(输入名称 - 我使用了 OrganiseUsings) 粘贴下面的代码 文件 -> 保存 MyMacros,退出

现在,如果您右键单击工具栏并自定义... - 您应该能够找到 MyMacros.OrganiseUsings.RemoveAndSortAll - 将其拖到方便的地方(可能是工具菜单;您可能还想在放置后更改名称它)。

您现在可以使用此选项为整个解决方案运行删除和排序命令。大大节省时间。

==== 代码 ====

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module OrganiseUsings

    Public Sub RemoveAndSortAll()
        On Error Resume Next
        Dim sol As Solution = DTE.Solution

        For i As Integer = 1 To sol.Projects.Count    
            Dim proj As Project = sol.Projects.Item(i)    
            For j As Integer = 1 To proj.ProjectItems.Count    
                RemoveAndSortSome(proj.ProjectItems.Item(j))    
            Next    
        Next    
    End Sub    

    Private Sub RemoveAndSortSome(ByVal projectItem As ProjectItem)
        On Error Resume Next
        If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then    
            If projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 Then
                Dim window As Window = projectItem.Open(Constants.vsViewKindCode)

                window.Activate()

                projectItem.Document.DTE.ExecuteCommand("Edit.RemoveAndSort")

                window.Close(vsSaveChanges.vsSaveChangesYes)
            End If    
        End If    

        For i As Integer = 1 To projectItem.ProjectItems.Count    
            RemoveAndSortSome(projectItem.ProjectItems.Item(i))    
        Next
    End Sub   

End Module

【讨论】:

不幸的是,Visual Studio 2012 不支持宏,因为它不支持 :(【参考方案11】:

如果您的意思是“使用”电源命令包含此功能 + 船载更多。

http://code.msdn.microsoft.com/PowerCommands

【讨论】:

以上是关于一次删除整个项目或解决方案中未使用的命名空间的主要内容,如果未能解决你的问题,请参考以下文章

命名空间错误中不存在类型资源

C++ 中未命名命名空间的使用

命名空间不能直接包含字段或方法等成员?

使用此 INSERT INTO 语句和 .NET OleDb 命名空间时如何解决语法错误?

c#Ajax 的错误,应该如何解决?

在 JAXB 编组时删除命名空间前缀