我正在做一些架构清理,包括将一堆类移动到不同的项目和/或命名空间中。目前我正在手动移动文件,构建,然后根据需要手动添加使用 Foo语句来解决编译错误。有人知道这样做的更聪明的方法吗?(我们是 CodeRush 和 Refactor!商店,但我很想知道 Resharper 是否对此提供支持)
9 回答
Visual Studio 2019 提供至少 2 个内置选项:
'Move to namespace...'重构可以在任何类上触发,VS 会提示输入目标命名空间。
当当前文件命名空间与文件夹结构不匹配时,会提供“将命名空间更改为...”重构。
这可用于通过以下方式将单个类移动到不同的命名空间:
- 创建所需的文件夹结构
- 移动文件
- 应用上述重构(CTRL+. 将光标悬停在命名空间上)
这些操作确保所有引用都相应更新。
Visual Studio 2010 可以重命名命名空间。将光标放在命名空间名称上并按F2。或者只是在代码中重命名它,然后在看到红色曲线出现后按Shift+ Alt+ 。F10Enter
Reharper 还可以重命名命名空间。引用:
重命名命名空间重构允许用户重命名特定命名空间并自动更正代码中对该命名空间的所有引用。以下用法已重命名:
- 命名空间语句
- 使用指令
- 类型的限定名称
此答案至少适用于 Visual Studio 2013 和 2015 ,无需重新锐化
- 将类文件移动到新文件夹
- 打开“查找和替换”
- 选择“在文件中替换”
- 在“查找内容”字段中键入原始命名空间定义,例如。
MyCorp.AppStuff.Api
- 在“替换为”字段中键入新的命名空间定义,例如。
MyCorp.AppStuff.Api.Extensions
- 使用“查找”字段的浏览按钮选择新文件夹...,或键入文件夹路径
- 按下Replace All按钮
VS 2015 和 VS 2017 有部分解决方案,没有使用免费扩展的Resharper 。
我今天(2017 年底)喜欢的一个扩展是Fix Namespace VS Extension: https ://marketplace.visualstudio.com/items?itemName=vs-publisher-599079.FixNamespace#overview
它分析您的解决方案的文件夹结构并使用它提供命名空间重构。不幸的是,它并不完美:它不能很好地跟踪依赖关系,但为我解决了大部分工作。
使用 Resharper:CTRL+ R+O
然后按两次向下箭头键选择Move Type To Another Namespace。
由于提供了上述答案(我猜),此功能已添加到 CodeRush。只需将克拉放在要移动的类型上,您就会在重构上看到将类型移动到命名空间选项!上下文菜单。这会将类型移动到新的命名空间并更新引用。不过,您可能仍希望将文件移动到与命名空间名称匹配的解决方案文件夹。
这不是最好的结果,但可以在没有插件或工具的情况下完成,只能使用 Visual Studio。在整个解决方案中查找和替换,匹配大小写,匹配整个单词。查找内容:类名,替换为:New.Namespace.ClassName(完全限定的类名)。
如果您在旧命名空间中有 100 多个已移动类和其他类的引用,那么哪些没有被移动,这是我找到的唯一万无一失且免费的解决方案。导致错误的唯一情况是您在其他命名空间中具有相同的类名。
如果您不能或不想使用 Re$harper,Notepad++是您的朋友:
- 确保您没有在 Visual Studio中为需要移动到新命名空间的文件保留更改
- 在 Notepad++ 中打开所有包含需要更改的命名空间的文件
- 打开Find & Replace(CTRL + H)
- 填写查找内容和替换为字段
- 按Replace All in All Opened Documents
- 保存所有文档中的所有更改(CTRL + SHIFT + S)
- 切换到 Visual Studio 并重新加载所有文档(Yes to all在提示符处)
完毕