有没有办法以编程方式将 class 从一个名称空间移动到另一个名称空间?

Is there a way to move a class from one namespace to the another, programmatically?

我想以编程方式将 class 从一个命名空间移动到另一个命名空间。这包括调整移动的 class 在其先前命名空间中的任何依赖项。

我猜我可以以某种方式利用 Roslyn 项目,但我找不到起点。

编辑:

我正在尝试对 C# 代码实施自动移动 class 重构。出于研究目的而这样做——收集代码指标并研究重构过程前后的变化。

我可以手动进行重构,但想知道是否可以自动进行。这意味着我已经有了重构候选人和他们建议的移动位置。

没有 built-in 对此的支持,所以是的,您必须自己实施。

如果您确实想尝试这个,您可能会执行一些高级步骤:

  1. 您首先调用 SymbolFinder.FindReferences 来确定您的类型名称被提及的位置。
  2. 对于您找到参考的每个文档,使用 SyntaxRewriter 重写语法。
  3. 将新语法放在那里。
  4. 运行 我们的简化程序将所有内容清理干净。

您可以深入研究我们的重命名代码以了解我们是如何做到这一点的,但我会警告您它相当复杂。就难度而言,此重构可能 "medium",所以不是劝阻您,但如果您尝试将此作为第一次介绍 Roslyn,那么您将面临一场艰苦的战斗。

(座右铭:重构总是比你想象的要难。)