在大型c#应用程序上执行批量命名空间重命名的最佳方法是什么?

Bro*_*ook 38 .net c# refactoring visual-studio

首先,一点背景.

目前我们的代码库中的命名空间和程序集(约60个程序集,数千个类)看起来像

WidgetCompany.Department.Something
Run Code Online (Sandbox Code Playgroud)

我们现在已经分拆出来,因此我们正在销售驱动WidgetCompany的软件,因此我们想重命名命名空间和程序集

NewCompany.Something
Run Code Online (Sandbox Code Playgroud)

在正常情况下,我可能只是坚持使用旧命名空间,但问题是我们的客户不希望在应用程序的任何位置看到其竞争对手的名称.如果他们看到堆栈跟踪,装配属性等,它不应该出现.这并不意味着隐藏我们的员工或做任何险恶的事情,我们只需要确保人们知道我们是一个独立的实体,独立的管理,他们不需要担心数据被共享等.

现在的问题.执行此类所有包含重命名的最佳方法是什么?以下内容需要更改:

  • (几乎)应用程序中的每个类的命名空间
  • using应用程序中引用旧名称的每个语句
  • 每个项目的文件夹结构
  • 依赖于更改的文件夹结构的项目之间的引用
  • .sln文件引用已更改的文件夹结构
  • 对完全合格的那些类的任何引用(应该很少和很远)
  • 在xml配置文件中对这些类的任何引用(配置节等)
  • 每个程序集的AssemblyInfo.cs文件
  • 每个.csproj文件中的AssemblyName

我是否坚持使用寻找 - 替换祈祷策略还是有更好的东西?

fra*_*ins 45

右键单击当前命名空间并选择Refactor - > Rename,然后在稍后出现的弹出窗口中更改名称.输入新名称,然后单击"确定".

如果您的命名空间有多个深度,则Visual Studio将不允许您键入点.但是,如果您复制并粘贴一个点,尽管有警告,它将开展业务.

  • 上次我检查它不适用于命名空间的多个级别,如level1.level2.level3.如果命名空间是单个级别,没有点,那么它可以正常工作.这是VS 2008 SP1. (7认同)
  • 被视为不正确.不回答原始问题,因为您无法以这种方式移动或删除命名空间组件. (4认同)
  • 重新进行多级更改(带点).这个bug仍然存在(VS 2015)因为它不会让你*键入*一个点.但是,如果您复制并*粘贴*一个点,尽管有警告,它将开展业务. (3认同)
  • +1因为这有助于强类型的东西,但对程序集名称,csproj文件,xml文件等没有帮助. (2认同)
  • 如果您想在根目录添加一些额外的命名空间,这似乎没有帮助 (2认同)
  • @点击副本过去的诡计:D (2认同)

Kei*_*thS 9

ReSharper的.从JetBrains免费获得5.1版本30天(足够的时间进行重命名).将光标放在要更改的命名空间上,然后按两次Ctrl-R(ReSharper Rename).它将使用任意数量级别的命名空间,并将该命名空间的任何用法转换为新的命名空间.但是,您必须更改解决方案中的每个唯一命名空间(除非您只使用查找/替换)


Dee*_*101 9

Visual Studio 2019 社区版支持此处所述。它适用于任何层次结构(带有点、根命名空间更改等)并正确更新所有依赖项。

  1. 将光标放在班级名称上

  2. Ctrl+.触发快速操作和重构菜单

  3. 选择移至命名空间 转向命名空间重构

  4. 在打开的对话框中,选择要将类型移动到的目标命名空间 选择命名空间对话框


Jon*_*rum 7

对于 Visual Studio 2022,这个问题终于得到了解决:

  • 右键单击项目或解决方案(而不是目录或文件)
  • 选择“同步命名空间”

整个项目中的命名空间现在应该反映文件夹结构。


Yod*_*ese 5

如果您有 ReSharper:

  1. 右键单击项目,属性。将默认命名空间更改为所需的命名空间。

  2. 右键单击项目,重构->调整命名空间以更新所有命名空间以使用默认命名空间

然后就让它发挥它的魔力吧。