这与代码无关,但与IDE有关。我正在开发一个包含大约35个不同项目的.NET解决方案。需要将这些项目重新组织为新的文件夹结构。为什么?因为其中大约10个将被删除,其余的将被分成更多的逻辑单元。 一种方法是创建一个新的解决方案,将项目拖放到Windows资源管理器中的新文件夹树中,然后将它们添加到新的解决方案中。 说实话,这听起来很蠢!
有没有办法将项目从IDE中移到不同的文件夹中?我试图“另存为”项目,但IDE不会接受不同的文件夹。
这很令人生气,但是因为文件夹名称中有一些错误的选择,我现在仍然坚持使用这些名称。
<小时/> 示例:现在我有一个项目主文件夹,其中包含名为“Client”,“Server”,“Business”,“Database”等的子文件夹。在这些子文件夹中,有更多子文件夹,每个子文件夹都是一个三位数字。在每个编号的文件夹中都有一个以某种逻辑方式命名的项目,例如Company.Business.Customers,在此项目中具有额外的逻辑。 问题是并非所有项目都遵循这个命名约定,我认为它已经过时了。 像Company.Business.Customers这样的项目应该只在项目根目录中名为Company.Business.Customers的文件夹中,这样才能更容易识别。该名称已经明确表明它是该项目的业务类。客户端类,业务类以及更多内容中的明确划分需要在解决方案中进行安排,但我希望扁平化文件结构。 (并删除一些过时的项目。)基本上,我不是重构,我只是在清理。 VS2008似乎没有这样的选择,但是......
答案 0 :(得分:6)
启动notepad.exe并打开.sln文件。然后启动Windows资源管理器,导航到解决方案目录。观察.sln文件内容与解决方案结构的匹配方式。编辑条目,使用资源管理器进行相应的更改。先备份。
答案 1 :(得分:1)
我不认为这里有一个简单的答案。您的主要问题是Visual Studio(或.NET)不关心您是否拥有属于项目中不同根命名空间的类。
因此,如果您有一个名为Project.BusinessObjects的项目和另一个名为Project.DataObjects的项目,则无法阻止您将名为Project.BusinessObjects.User的类放入Project.DataObjects项目中。
如果没有大量的手工工作,我不知道如何做到这一切。如果你使用'命名空间重命名'功能,Resharper将会有相当多的帮助,但你仍然会有很多笨拙的工作。
答案 2 :(得分:1)
另外,请非常警惕与版本控制系统一起执行此操作。您必须非常了解您的版本控制系统,以了解它对这种重大重构的反应。
除此之外,你所描述的并不是那么困难。您必须手动编辑解决方案文件和项目文件,并且可能需要从解决方案中删除项目,并在正确的目录下再次添加项目。
我会做一个备份,然后重构。我认为认为你可以从IDE完成所需的一切是错误的。如果您在使用旧的Visual SourceSafe API的源代码管理系统中从IDE中执行您所描述的内容,那么您将认真地(保证)搞砸了您的绑定,那些API不是用于移动(或重命名,就此而言)以你描述的方式存档。在这种情况下执行此操作的最佳方法是删除所有源代码控制绑定,然后重新添加重组后的解决方案。
这并不困难,你只需准备(做备份)并进行实验,直到你做对了。
答案 3 :(得分:1)
我认为在Visual Studio中没有任何办法可以做到这一点,而@gmagana指出,如果文件受版本控制,那将很难做到。
但是,可以手动完成。
首先创建新的所需文件夹结构 - 暂时忽略.csproj文件和解决方案文件,以及更多您感兴趣的.cs文件到新结构中。
现在,启动Visual Studio,并创建一个新的空项目。如果您有不同类型的项目,则可能需要为每种类型创建一个新的空项目。这将为您留下一个空的.csproj文件,以及一个只包含一个项目的.sln文件。
将空项目文件复制到需要的位置,并根据需要重命名。如果需要,可以编辑它们并更改程序集名称和默认命名空间,或者等到完成后再使用Visual Studio更改设置。
最后,编辑.sln文件,然后删除Project部分。将空的.sln文件复制到您想要的位置,然后在Visual Studio中将其打开。现在,将每个现有项目添加到新解决方案中。
在每个项目中,单击“全部显示”按钮,然后开始包含您已复制到项目结构中的所有文件。解决缺少的依赖项,更改项目的名称空间和程序集名称,并确保代码文件未指定您不需要的名称空间。重复直到完成。
一旦你获得了新的构建解决方案,在Reflector中打开DLL将有助于确保你没有错过代码文件中的任何命名空间声明 - 如果你想要到达如果DLL与命名空间之间存在1-1对应关系,或者甚至确保DLL之间没有命名空间,则Reflector就是你的朋友。
祝你好运。答案 4 :(得分:0)
我使用以下解决方案来解决我的问题:
这确实很好地清理了整个项目。然后我将整个项目添加到Vault(版本控制系统),一旦它在VSS中,我再次删除了文件夹(实际上,只是先将其重命名)并从VSS系统中检索回来,因此任何过时的二进制文件和其他垃圾都是也走了 这是很多工作,但结果确切地证明了它需要的东西。