有没有办法以编程方式将 class 从一个名称空间移动到另一个名称空间?
Is there a way to move a class from one namespace to the another, programmatically?
我想以编程方式将 class 从一个命名空间移动到另一个命名空间。这包括调整移动的 class 在其先前命名空间中的任何依赖项。
我猜我可以以某种方式利用 Roslyn 项目,但我找不到起点。
编辑:
我正在尝试对 C# 代码实施自动移动 class 重构。出于研究目的而这样做——收集代码指标并研究重构过程前后的变化。
我可以手动进行重构,但想知道是否可以自动进行。这意味着我已经有了重构候选人和他们建议的移动位置。
没有 built-in 对此的支持,所以是的,您必须自己实施。
如果您确实想尝试这个,您可能会执行一些高级步骤:
- 您首先调用 SymbolFinder.FindReferences 来确定您的类型名称被提及的位置。
- 对于您找到参考的每个文档,使用 SyntaxRewriter 重写语法。
- 将新语法放在那里。
- 运行 我们的简化程序将所有内容清理干净。
您可以深入研究我们的重命名代码以了解我们是如何做到这一点的,但我会警告您它相当复杂。就难度而言,此重构可能 "medium",所以不是劝阻您,但如果您尝试将此作为第一次介绍 Roslyn,那么您将面临一场艰苦的战斗。
(座右铭:重构总是比你想象的要难。)
我想以编程方式将 class 从一个命名空间移动到另一个命名空间。这包括调整移动的 class 在其先前命名空间中的任何依赖项。
我猜我可以以某种方式利用 Roslyn 项目,但我找不到起点。
编辑:
我正在尝试对 C# 代码实施自动移动 class 重构。出于研究目的而这样做——收集代码指标并研究重构过程前后的变化。
我可以手动进行重构,但想知道是否可以自动进行。这意味着我已经有了重构候选人和他们建议的移动位置。
没有 built-in 对此的支持,所以是的,您必须自己实施。
如果您确实想尝试这个,您可能会执行一些高级步骤:
- 您首先调用 SymbolFinder.FindReferences 来确定您的类型名称被提及的位置。
- 对于您找到参考的每个文档,使用 SyntaxRewriter 重写语法。
- 将新语法放在那里。
- 运行 我们的简化程序将所有内容清理干净。
您可以深入研究我们的重命名代码以了解我们是如何做到这一点的,但我会警告您它相当复杂。就难度而言,此重构可能 "medium",所以不是劝阻您,但如果您尝试将此作为第一次介绍 Roslyn,那么您将面临一场艰苦的战斗。
(座右铭:重构总是比你想象的要难。)