批量命名空间重命名

时间:2015-09-02 12:22:05

标签: c# namespaces

我使用ASP.NET Web Forms制作ERP。我开始研究这一段时间并成功完成了一个版本。我的项目的根命名空间是EPERP。所以我有其他命名空间,如EPERP.DataAccessLayer,EPERP.Controllers等。

现在,由于客户的要求,我将项目分为几个部分。我已将代码层划分为一个部分,并根据客户端要求将视图层划分为多个部分。

丑陋的部分是,我通过在visual studio中打开空的Web应用程序项目,然后将相关的视图文件复制到该项目中来完成此操作。这就是我将一个项目分成四个项目的方式。

由于我的代码部分是一个单独的项目,所有与视图相关的项目都引用从该项目创建的dll。

问题在于,所有项目都具有相同的命名空间。所以我的视图相关项目有根命名空间EPERP,并且它们引用了一个具有根命名空间EPERP的dll。

我的所有项目都没有相同的文件,但有时我在运行项目时遇到此错误,因为文件是在两个程序集中指定的,所以文件是不明确的。

在任何情况下,保持相同的命名空间是一个非常糟糕的决定。

如何更改项目的命名空间以便它也影响子名称空间?

5 个答案:

答案 0 :(得分:0)

为什么不通过VS替换全部

  

(快捷键:ctrl + shift + H)

但请确保命名空间后面没有任何名称,如子字符串或其他内容。

答案 1 :(得分:0)

在这种情况下,最好手动重命名

答案 2 :(得分:0)

在visual studio中的命名空间EPERP.DataAccessLayer下打开一个文件,然后将其更改为SOMETHINGNEW.DataAccessLayer。一旦你这样做,你会看到一个像SOMETHINGNEW.DataAccessLayer这样的小红盒,当你点击那个红色的东西时,你会看到选项"重命名' EPERP'当您选择此选项时,它会将EPERP的所有引用重命名为SOMETHINGNEW。

\ n \ n \ n' SOMETHINGNEW'"

答案 3 :(得分:0)

我建议编写一个小实用程序,而不是手动执行。如果你感觉有点懒,那么使用像notepad ++这样的免费工具来递归查找和替换文件夹中.cs文件的名称空间声明。

答案 4 :(得分:0)

我不知道一种完全自动的方式来做你要求的事情。 您需要采取一些步骤来执行此操作,并且可以自动执行某些步骤。

我会尝试同时提供答案并分享经验。

首先,您需要一种方法来识别文件中的位置,实际指定了命名空间,并且要发现的第一个文件类型是.csproj个文件。 在您喜欢的文本编辑器中将其作为文本文件打开。如果需要在Visual Studio中打开它,则需要首先使用“解决方案资源管理器”窗口中的鼠标右键上下文菜单卸载项目。以这种方式卸载项目后,可以使用相同的上下文菜单对其进行编辑。您可以在完成编辑后重新加载项目。

当然,在以这种方式对文本文件进行任何更改之前,您应备份整个解决方案文件夹。

在备份之前,您应该退出Visual Studio。这样你可以确保所有内容都保存在磁盘上,因为当你手动更改内容时,Visual Studio并不总是很好用,并且最终可能会搞砸了并用它自己的内存版本覆盖磁盘上的文件。

现在您已经在文本编辑器中打开了.csproj文件,实际上您正在查看使用XML格式的msbuild文件格式。 搜索RootNamespace属性:

https://msdn.microsoft.com/en-us/library/bb629394.aspx?f=255&MSPPError=-2147217396

如果您采用此路径(将.csproj编辑为文本文件),则需要更改此属性。

您也可以在Visual Studio中指定项目属性中的默认命名空间,但重要的是要知道您有控制权,因为所有项目文件本质上只是XML文件,可以作为文本进行编辑。

这是“完全”更改命名空间的第一步,如果您希望所有嵌入式资源和代码生成都能正常工作,则不能跳过它。

第二步是更改所有项目的.cs文件中的名称空间声明和引用,包括由aspnet designer生成的常规cs文件和Designer.cs文件。

您可以使用Ctrl-Shift-F访问的“替换文件”命令替换您声明或引用该命名空间的所有.cs文件中的文本。

另一种选择是使用ReSharper的“调整命名空间”命令,我建议将ReSharper用于所有Visual Studio / C#开发任务。

然后,您可以在解决方案文件夹中的所有文件中浏览命名空间引用,并发现引用它的所有文件xml文本文件类型,例如.resx文件。这些也应由ReSharper处理。

还有一点需要注意,您可能希望在完成前面的步骤后删除.suo和.user文件,并清除ReSharper缓存。在文本编辑器中手动编辑项目文件后,最好先执行此步骤。