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

时间:2008-10-06 13:07:19

标签: visual-studio refactoring

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

9 个答案:

答案 0 :(得分:33)

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

Reharper也可以rename namespaces。引用:

  

重命名命名空间重构   允许用户重命名特定的   命名空间并自动纠正   所有对名称空间的引用   码。以下用法是   更名:

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

答案 1 :(得分:27)

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

答案 2 :(得分:8)

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

  1. 将班级文件移至新文件夹
  2. 打开'查找并替换'
  3. 选择'替换文件'
  4. 在'查找内容'中输入原始命名空间定义。领域,例如。 MyCorp.AppStuff.Api
  5. 在'替换为'中键入 new 命名空间定义。领域,例如。 MyCorp.AppStuff.Api.Extensions
  6. 使用'查找'选择新文件夹。字段的浏览按钮 ... ,或键入文件夹路径
  7. 全部替换按钮

答案 3 :(得分:3)

VS 2015和VS的部分解决方案VS 2017 没有Resharper 使用免费扩展程序。

我今天喜欢的一个扩展程序(2017年底)是修复命名空间 VS扩展程序: https://marketplace.visualstudio.com/items?itemName=vs-publisher-599079.FixNamespace#overview

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

答案 4 :(得分:2)

使用Resharper: CTRL + R + O

然后按两次向下箭头键选择将类型移动到另一个命名空间

答案 5 :(得分:1)

由于提供了上面的答案(我猜),这个功能已被添加到CodeRush中。只需将克拉放在要移动的 Type 上,您就会在Refactor上看到 Move Type to Namespace 选项!上下文菜单。这会将类型移动到新的命名空间并更新引用。您可能仍希望将文件移动到与命名空间名称匹配的解决方案文件夹中。

答案 6 :(得分:1)

自Visual Studio 2019开始,当当前文件名称空间与文件夹结构不匹配时,将提供新的``将名称空间更改为...''重构。

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

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

该操作可确保所有引用均得到相应更新。

答案 7 :(得分:0)

如果您不能或不想使用Re $ harper, Notepad ++ 是您的朋友:

  1. 确保您在Visual Studio 中没有针对需要移动到新命名空间的文件进行了更改
  2. 打开所有包含需要在Notepad ++中更改的命名空间的文件
  3. 打开 查找&替换 (CTRL + H)
  4. 填写查找内容和替换字段
  5. 在所有已打开的文档中全部替换
  6. 保存所有文档中的所有更改(CTRL + SHIFT + S)
  7. 切换到Visual Studio并重新加载所有文档(提示时
  8. 完成

答案 8 :(得分:0)

这不是最好的结果,但无需插件或工具即可完成,只能使用Visual Studio。在整个解决方案中查找和替换,区分大小写,匹配整个单词。 查找内容:类名,替换为:New.Namespace.ClassName(完全限定的类名)。

如果在旧名称空间中有100多个引用的已移动类和其他类,则不会被移动,这是我发现的唯一安全且免费的解决方案。唯一会导致错误的情况是在其他名称空间中具有相同的类名。