Visual Studio:是否有"移动类到不同的命名空间"重构?

Set*_*son 66 refactoring visual-studio

我正在做一些架构清理,涉及将一堆类移动到不同的项目和/或命名空间.目前我正在手动移动文件,构建,然后根据需要手动添加使用Foo语句来解决编译错误.有人知道这样做的更聪明的方法吗?(我们是CodeRush和Refactor!商店,但我很想知道Resharper是否支持这个)

Dar*_*rov 35

Visual Studio 2010可以重命名命名空间.将光标放在命名空间名称上,然后按F2.或者只是在代码中重命名并按下Shift+ Alt+ F10,Enter看到红色波形出现后.

Reharper还可以重命名名称空间.引用:

重命名命名空间重构,用户可以重命名一个特定的命名空间,并自动修正到代码中的命名空间的所有引用.以下用法重命名为:

  • 命名空间语句
  • 使用指令
  • 类型的合格名称

  • @sbi - 是的,它可以.您可以在VS中创建新命名空间(即创建与新命名空间相对应的文件夹结构),然后将类型拖放到新文件夹中.Resharper现在会警告您,这些类型位于与其文件夹结构不对应的命名空间(旧命名空间)中(即新命名空间).然后它为您提供纠正它们的机会; 这将只更新已移动到新名称空间或子名称空间的类型. (11认同)
  • 当您想将标识符移动到命名空间时,它会有什么帮助? (10认同)
  • @Igor:再次阅读问题.oleks希望将命名空间划分为子命名空间.这意味着将`NS :: C`移动到`NS :: NS1 :: C`.可以重命名命名空间吗? (7认同)
  • @sbi通过将该类所在的命名空间重命名为新名称? (3认同)

Jos*_*osh 28

Resharper是我知道具备这种能力的唯一工具.CodeRush和Refactor中还缺少许多其他功能!

  • 在大多数情况下,我真的很喜欢DevExpress工具,但是移动文件的功能似乎是一个简单的功能,令我惊讶的是它的缺失。我一直想测试Resharper一段时间,也许是时候... (2认同)
  • @dmitri - 是的,它确实会变得很吵,特别是当你像我一样跑两个时; p你可以在选项中转动画画,如果那是困扰你的话. (2认同)

gsc*_*ger 12

Visual Studio 2019提供至少2个内置选项:

可以在任何类上触发“移至名称空间...”重构,VS会提示您输入目标名称空间。

当前文件名称空间与文件夹结构不匹配时,提供“将名称空间更改为...”重构。

这可用于通过以下方式将各个类移至其他名称空间:

  1. 创建所需的文件夹结构
  2. 移动文件
  3. 应用提到的重构(使用光标在名称空间上的CTRL +。)

这些操作确保所有引用都相应更新。

  • 这应该是当前接受的答案,因为它提供了当前版本的 VS 的解决方案,无需任何第三方解决方案。 (3认同)
  • 我在VS社区中看到了这两个选项,“移动到名称空间”确实可以更新引用 (2认同)
  • 移动到名称空间确实会更新引用。它没有更新文件中具有更多类型的类的引用。我还注意到这对于部分课程根本不起作用。感谢您的确认:) (2认同)
  • 当我打开“快速操作和重构...”菜单时,我是唯一一个没有看到“移至命名空间...”的人吗?我只有“生成构造函数...”、“生成覆盖...”或“提取接口...”。可能重构仅适用于 C# 而不是 VB.. 可惜.. (2认同)

Gus*_*dor 9

此答案适用于至少Visual Studio 2013和2015 ,不需要resharper

  1. 将类文件移动到新文件夹
  2. 打开'查找并替换'
  3. 选择"替换文件"
  4. 在"查找内容"字段中键入原始命名空间定义,例如.MyCorp.AppStuff.Api
  5. 在"替换为"字段中键入新的命名空间定义,例如.MyCorp.AppStuff.Api.Extensions
  6. 使用"查找范围"字段的"浏览"按钮选择新文件夹...,或键入文件夹路径
  7. Replace All按钮

  • 这仅适用于您不将某个名称空间(您仍想使用)移动到另一个名称空间的情况.这基本上只有在您完全重命名命名空间时才有效. (3认同)
  • @Blackclaws 我觉得第 1 步和第 6 步涵盖了这一点 (2认同)

小智 5

有针对 VS 2015 和 VS 2017 的部分解决方案,无需使用免费扩展的Resharper

我今天喜欢的一个扩展(2017 年底)是Fix Namespace VS Extension:https : //marketplace.visualstudio.com/items?itemName= vs-publisher-599079.FixNamespace# overview

它分析您的解决方案的文件夹结构并使用它提供命名空间重构。不幸的是,它并不完美:它不能很好地跟踪依赖关系,但为我解决了大部分工作。